一個程序至少有一個進程榄棵,一個進程至少有一個線程
定義方面:進程是程序在某個數(shù)據(jù)集合上的一次運行活動;線程是進程中的一個執(zhí)行路徑曲伊。
角色方面:在支持線程機制的系統(tǒng)中髓梅,進程是系統(tǒng)資源分配的單位,線程是系統(tǒng)調(diào)度的單位壳繁。
資源共享方面:進程之間不能共享資源震捣,而線程共享所在進程的地址空間和其它資源。同時線程還有自己的棧和棧指針闹炉,程序計數(shù)器等寄存器蒿赢。
獨立性方面:進程有自己獨立的地址空間,而線程沒有渣触,線程必須依賴于進程而存在羡棵。
線程與進程總結(jié):
進程和線程
概述:
進程是具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位.
線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創(chuàng)建和撤銷另一個線程;同一個進程中的多個線程之間可以并發(fā)執(zhí)行.
相對進程而言嗅钻,線程是一個更加接近于執(zhí)行體的概念皂冰,它可以與同進程中的其他線程共享數(shù)據(jù)店展,但擁有自己的棧空間秃流,擁有獨立的執(zhí)行序列赂蕴。
在串行程序基礎(chǔ)上引入線程和進程是為了提高程序的并發(fā)度,從而提高程序運行效率和響應(yīng)時間舶胀。
區(qū)別:
進程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式概说。進程有獨立的地址空間,一個進程崩潰后嚣伐,在保護模式下不會對其它進程產(chǎn)生影響糖赔,而線程只是一個進程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量轩端,但線程之間沒有單獨的地址空間放典,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯船万,但在進程切換時刻撒,耗費資源較大,效率要差一些耿导。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作声怔,只能用線程,不能用進程舱呻。
1) 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
2) 線程的劃分尺度小于進程醋火,使得多線程程序的并發(fā)性高。
3) 另外箱吕,進程在執(zhí)行過程中擁有獨立的內(nèi)存單元芥驳,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率茬高。
4) 線程在執(zhí)行過程中與進程還是有區(qū)別的兆旬。每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口怎栽。但是線程不能夠獨立執(zhí)行丽猬,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制熏瞄。
5) 從邏輯角度來看脚祟,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行强饮。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應(yīng)用由桌,來實現(xiàn)進程的調(diào)度和管理以及資源分配。這就是進程和線程的重要區(qū)別。
優(yōu)缺點:
線程和進程在使用上各有優(yōu)缺點:線程執(zhí)行開銷小行您,但不利于資源的管理和保護铭乾;而進程正相反。同時邑雅,線程適合于在SMP機器上運行片橡,而進程則可以跨機器遷移妈经。
多進程淮野,多線程
概述:
進程就是一個程序運行的時候被CPU抽象出來的,一個程序運行后被抽象為一個進程吹泡,但是線程是從一個進程里面分割出來的骤星,由于CPU處理進程的時候是采用時間片輪轉(zhuǎn)的方式,所以要把一個大個進程給分割成多個線程爆哑,例如:網(wǎng)際快車中文件分成100部分 10個線程 文件就被分成了10份來同時下載 1-10 占一個線程 11-20占一個線程,依次類推,線程越多,文件就被分的越多,同時下載 當然速度也就越快
進程是程序在計算機上的一次執(zhí)行活動洞难。當你運行一個程序,你就啟動了一個進程揭朝。顯然队贱,程序只是一組指令的有序集合,它本身沒有任何運行的含義潭袱,只是一個靜態(tài)實體柱嫌。而進程則不同,它是程序在某個數(shù)據(jù)集上的執(zhí)行屯换,是一個動態(tài)實體编丘。它因創(chuàng)建而產(chǎn)生,因調(diào)度而運行彤悔,因等待資源或事件而被處于等待狀態(tài)嘉抓,因完成任務(wù)而被撤消,反映了一個程序在一定的數(shù)據(jù)集上運行的全部動態(tài)過程晕窑。進程是操作系統(tǒng)分配資源的單位抑片。在Windows下,進程又被細化為線程杨赤,也就是一個進程下有多個能獨立運行的更小的單位敞斋。線程(Thread)是進程的一個實體,是CPU調(diào)度和分派的基本單位望拖。線程不能夠獨立執(zhí)行渺尘,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制说敏。
線程和進程的關(guān)系是:線程是屬于進程的鸥跟,線程運行在進程空間內(nèi),同一進程所產(chǎn)生的線程共享同一內(nèi)存空間,當進程退出時該進程所產(chǎn)生的線程都會被強制退出并清除医咨。線程可與屬于同一進程的其它線程共享進程所擁有的全部資源枫匾,但是其本身基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的信息(如程序計數(shù)器拟淮、一組寄存器和棧)干茉。
在同一個時間里,同一個計算機系統(tǒng)中如果允許兩個或兩個以上的進程處于運行狀態(tài)很泊,這便是多任務(wù)〗浅妫現(xiàn)代的操作系統(tǒng)幾乎都是多任務(wù)操作系統(tǒng),能夠同時管理多個進程的運行委造。 多任務(wù)帶來的好處是明顯的戳鹅,比如你可以邊聽mp3邊上網(wǎng),與此同時甚至可以將下載的文檔打印出來昏兆,而這些任務(wù)之間絲毫不會相互干擾枫虏。那么這里就涉及到并行的問題,俗話說爬虱,一心不能二用隶债,這對計算機也一樣,原則上一個CPU只能分配給一個進程跑筝,以便運行這個進程死讹。我們通常使用的計算機中只有一個CPU,也就是說只有一顆心继蜡,要讓它一心多用回俐,同時運行多個進程,就必須使用并發(fā)技術(shù)稀并。實現(xiàn)并發(fā)技術(shù)相當復(fù)雜仅颇,最容易理解的是“時間片輪轉(zhuǎn)進程調(diào)度算法”,它的思想簡單介紹如下:**在操作系統(tǒng)的管理下碘举,所有正在運行的進程輪流使用CPU忘瓦,每個進程允許占用CPU的時間非常短(比如10毫秒),這樣用戶根本感覺不出來CPU是在輪流為多個進程服務(wù)引颈,就好象所有的進程都在不間斷地運行一樣耕皮。但實際上在任何一個時間內(nèi)有且僅有一個進程占有CPU**。
如果一臺計算機有多個CPU蝙场,情況就不同了凌停,如果進程數(shù)小于CPU數(shù),則不同的進程可以分配給不同的CPU來運行售滤,這樣罚拟,多個進程就是真正同時運行的台诗,這便是并行。但如果進程數(shù)大于CPU數(shù)赐俗,則仍然需要使用并發(fā)技術(shù)拉队。
在Windows中,進行CPU分配是以線程為單位的阻逮,一個進程可能由多個線程組成粱快,這時情況更加復(fù)雜,但簡單地說叔扼,有如下關(guān)系:
總線程數(shù)<= CPU數(shù)量:并行運行
總線程數(shù)> CPU數(shù)量:并發(fā)運行
(并行和并發(fā)的區(qū)別:
你吃飯吃到一半事哭,電話來了,你一直到吃完了以后才去接币励,這就說明你不支持并發(fā)也不支持并行慷蠕。
你吃飯吃到一半珊拼,電話來了食呻,你停了下來接了電話,接完后繼續(xù)吃飯澎现,這說明你支持并發(fā)仅胞。
你吃飯吃到一半,電話來了剑辫,你一邊打電話一邊吃飯干旧,這說明你支持并行。
并發(fā)的關(guān)鍵是你有處理多個任務(wù)的能力妹蔽,不一定要同時椎眯。并行的關(guān)鍵是你有同時處理多個任務(wù)的能力。它們最關(guān)鍵的點就是:是否是『同時』胳岂。)
并行運行的效率顯然高于并發(fā)運行编整,所以在多CPU的計算機中,多任務(wù)的效率比較高乳丰。但是掌测,如果在多CPU計算機中只運行一個進程(線程),就不能發(fā)揮多CPU的優(yōu)勢产园。
多任務(wù)操作系統(tǒng)(如Windows)的基本原理是:操作系統(tǒng)將CPU的時間片分配給多個線程,每個線程在操作系統(tǒng)指定的時間片內(nèi)完成(注意,這里的多個線程是分屬于不同進程的).操作系統(tǒng)不斷的從一個線程的執(zhí)行切換到另一個線程的執(zhí)行,如此往復(fù),宏觀上看來,就好像是多個線程在一起執(zhí)行.由于這多個線程分屬于不同的進程,因此在我們看來,就好像是多個進程在同時執(zhí)行,這樣就實現(xiàn)了多任務(wù).
分類
根據(jù)進程與線程的設(shè)置汞斧,操作系統(tǒng)大致分為如下類型:
(1) 單進程、單線程什燕,MS-DOS大致是這種操作系統(tǒng)粘勒;
(2) 多進程、單線程屎即,多數(shù)UNIX(及類UNIX的LINUX)是這種操作系統(tǒng)庙睡;
(3) 多進程、多線程,Win32(Windows NT/2000/XP等)埃撵、Solaris 2.x和OS/2都是這種操作系統(tǒng)赵颅;
(4) 單進程、多線程暂刘,VxWorks是這種操作系統(tǒng)饺谬。
引入線程帶來的主要好處:
(1) 在進程內(nèi)創(chuàng)建、終止線程比創(chuàng)建谣拣、終止進程要快募寨;
(2) 同一進程內(nèi)的線程間切換比進程間的切換要快,尤其是用戶級線程間的切換。