概念:
程序(program)只是一組指令的有序集合曾掂。
任務(task)是最抽象的,是一個一般性的術語,指由軟件完成的一個活動惫谤。一個任務既可以是一個進程,也可以是一個線程。簡而言之,它指的是一系列共同達到某一目的的操作珠洗。例如,讀取數(shù)據(jù)并將數(shù)據(jù)放入內(nèi)存中溜歪。這個任務可以作為一個進程來實現(xiàn),也可以作為一個線程(或作為一個中斷任務)來實現(xiàn)。
進程(process)常常被定義為程序的執(zhí)行许蓖『恚可以把一個進程看成是一個獨立的程序,在內(nèi)存中有其完備的數(shù)據(jù)空間和代碼空間调衰。一個進程所擁有的數(shù)據(jù)和變量只屬于它自己。
進程是表示資源分配的基本單位自阱,又是調(diào)度運行的基本單位嚎莉。例如,用戶運行自己的程序沛豌,系統(tǒng)就創(chuàng)建一個進程趋箩,并為它分配資源,包括各種表格加派、內(nèi)存空間叫确、磁盤空間、I/O設備等芍锦。然后竹勉,把該進程放人進程的就緒隊列。進程調(diào)度程序選中它娄琉,為它分配CPU以及其它有關資源次乓,該進程才真正運行。所以孽水,進程是系統(tǒng)中的并發(fā)執(zhí)行的單位票腰。
在Mac、Windows NT等采用微內(nèi)核結構的操作系統(tǒng)中匈棘,進程的功能發(fā)生了變化:它只是資源分配的單位丧慈,而不再是調(diào)度運行的單位。在微內(nèi)核系統(tǒng)中主卫,真正調(diào)度運行的基本單位是線程。因此鹃愤,實現(xiàn)并發(fā)功能的單位是線程簇搅。
線程(tread)則是某一進程中一路單獨運行的程序。也就是說,線程存在于進程之中软吐。一個進程由一個或多個線程構成,各線程共享相同的代碼和全局數(shù)據(jù),但各有其自己的堆棧瘩将。由于堆棧是每個線程一個,所以局部變量對每一線程來說是私有的。由于所有線程共享同樣的代碼和全局數(shù)據(jù),它們比進程更緊密,比單獨的進程間更趨向于相互作用,線程間的相互作用更容易些,因為它們本身就有某些供通信用的共享內(nèi)存:進程的全局數(shù)據(jù)凹耙。
一個進程和一個線程最顯著的區(qū)別是:線程有自己的全局數(shù)據(jù)姿现。線程存在于進程中,因此一個進程的全局變量由所有的線程共享。由于線程共享同樣的系統(tǒng)區(qū)域,操作系統(tǒng)分配給一個進程的資源對該進程的所有線程都是可用的,正如全局數(shù)據(jù)可供所有線程使用一樣
線程是進程中執(zhí)行運算的最小單位肖抱,亦即執(zhí)行處理機調(diào)度的基本單位备典。如果把進程理解為在邏輯上操作系統(tǒng)所完成的任務,那么線程表示完成該任務的許多可能的子任務之一意述。例如提佣,假設用戶啟動了一個窗口中的數(shù)據(jù)庫應用程序吮蛹,操作系統(tǒng)就將對數(shù)據(jù)庫的調(diào)用表示為一個進程。假設用戶要從數(shù)據(jù)庫中產(chǎn)生一份工資單報表拌屏,并傳到一個文件中潮针,這是一個子任務;在產(chǎn)生工資單報表的過程中倚喂,用戶又可以輸人數(shù)據(jù)庫查詢請求每篷,這又是一個子任務。這樣端圈,操作系統(tǒng)則把每一個請求――工資單報表和新輸人的數(shù)據(jù)查詢表示為數(shù)據(jù)庫進程中的獨立的線程雳攘。線程可以在處理器上獨立調(diào)度執(zhí)行,這樣枫笛,在多處理器環(huán)境下就允許幾個線程各自在單獨處理器上進行吨灭。操作系統(tǒng)提供線程就是為了方便而有效地實現(xiàn)這種并發(fā)性
引入線程的好處
(1)易于調(diào)度。
(2)提高并發(fā)性刑巧。通過線程可方便有效地實現(xiàn)并發(fā)性喧兄。進程可創(chuàng)建多個線程來執(zhí)行同一程序的不同部分。
(3)開銷少啊楚。創(chuàng)建線程比創(chuàng)建進程要快吠冤,所需開銷很少。恭理。
(4)利于充分發(fā)揮多處理器的功能拯辙。通過創(chuàng)建多線程進程(即一個進程可具有兩個或更多個線程),每個線程在一個處理器上運行颜价,從而實現(xiàn)應用程序的并發(fā)性涯保,使每個處理器都得到充分運行。
聯(lián)系:
進程與線程區(qū)別與聯(lián)系
(1)一個線程只能屬于一個進程周伦,而一個進程可以有多個線程夕春,但至少有一個線程。
(2)資源分配給進程专挪,同一進程的所有線程共享該進程的所有資源及志。
(3)處理機分給線程,即真正在處理機上運行的是線程寨腔。
(4)線程在執(zhí)行過程中速侈,需要協(xié)作同步。不同進程的線程間要利用消息通信的辦法實現(xiàn)同步迫卢。
(5)劃分尺度:線程更小倚搬,所以多線程程序并發(fā)性更高;
(6)資源分配:進程是資源分配的基本單位靖避,同一進程內(nèi)多個線程共享其資源潭枣;
(7)地址空間:進程擁有獨立的地址空間比默,同一進程內(nèi)多個線程共享其資源;
(8)處理器調(diào)度:線程是處理器調(diào)度的基本單位盆犁;
(9)執(zhí)行:每個線程都有一個程序運行的入口命咐,順序執(zhí)行序列和程序的出口,但線程不能單獨執(zhí)行谐岁,必須組成進程醋奠,一個進程至少有一個主線程。簡而言之,一個程序至少有一個進程,一個進程至少有一個線程伊佃。
進程和程序區(qū)別和聯(lián)系
(1)程序只是一組指令的有序集合窜司,它本身沒有任何運行的含義,它只是一個靜態(tài)的實體航揉。而進程則不同塞祈,它是程序在某個數(shù)據(jù)集上的執(zhí)行。進程是一個動態(tài)的實體帅涂,它有自己的生命周期议薪。反映了一個程序在一定的數(shù)據(jù)集上運行的全部動態(tài)過程。
(2)進程和程序并不是一一對應的媳友,一個程序執(zhí)行在不同的數(shù)據(jù)集上就成為不同的進程斯议,可以用進程控制塊來唯一地標識每個進程。而這一點正是程序無法做到的醇锚,由于程序沒有和數(shù)據(jù)產(chǎn)生直接的聯(lián)系哼御,既使是執(zhí)行不同的數(shù)據(jù)的程序,他們的指令的集合依然是一樣的焊唬,所以無法唯一地標識出這些運行于不同數(shù)據(jù)集上的程序恋昼。一般來說,一個進程肯定有一個與之對應的程序求晶,而且只有一個焰雕。而一個程序有可能沒有與之對應的進程(因為它沒有執(zhí)行),也有可能有多個進程與之對應(運行在幾個不同的數(shù)據(jù)集上)。
(3)進程還具有并發(fā)性和交往性芳杏,這也與程序的封閉性不同。
進程和程序區(qū)別和聯(lián)系表現(xiàn)在以下方面:
1)程序只是一組指令的有序集合辟宗,它本身沒有任何運行的含義爵赵,它只是一個靜態(tài)的實體。而進程則不同泊脐,它是程序在某個數(shù)據(jù)集上的執(zhí)行空幻。
進程是一個動態(tài)的實體,它有自己的生命周期容客。它因創(chuàng)建而產(chǎn)生秕铛,因調(diào)度而運行约郁,因等待資源或事件而被處于等待狀態(tài),因完成任務而被撤消但两。反映了一個程序在一定的數(shù)據(jù)集上運行的全部動態(tài)過程鬓梅。
2)進程和程序并不是一一對應的,一個程序執(zhí)行在不同的數(shù)據(jù)集上就成為不同的進程谨湘,可以用進程控制塊來唯一地標識每個進程绽快。而這一點正是程序無法做到的,由于程序沒有和數(shù)據(jù)產(chǎn)生直接的聯(lián)系紧阔,既使是執(zhí)行不同的數(shù)據(jù)的程序坊罢,他們的指令的集合依然是一樣的,所以無法唯一地標識出這些運行于不同數(shù)據(jù)集上的程序擅耽。一般來說活孩,一個進程肯定有一個與之對應的程序,而且只有一個乖仇。而一個程序有可能沒有與之對應的進程(因為它沒有執(zhí)行),也有可能有多個進程與之對應(運行在幾個不同的數(shù)據(jù)集上)憾儒。
3)進程還具有并發(fā)性和交往性,這也與程序的封閉性不同这敬。進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元航夺,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應用的并發(fā)性。進程和線程的區(qū)別在于:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小于進程崔涂,使得多線程程序的并發(fā)性高阳掐。
另外,進程在執(zhí)行過程中擁有獨立的內(nèi)存單元冷蚂,而多個線程共享內(nèi)存缭保,從而極大地提高了程序的運行效率。
線程在執(zhí)行過程中與進程還是有區(qū)別的蝙茶。每個獨立的線程有一個程序運行的入口艺骂、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行隆夯,必須依存在應用程序中钳恕,由應用程序提供多個線程執(zhí)行控制。
從邏輯角度來看蹄衷,多線程的意義在于一個應用程序中忧额,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應用愧口,來實現(xiàn)進程的調(diào)度和管理以及資源分配睦番。這就是進程和線程的重要區(qū)別。
進程是具有一定獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位.
線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創(chuàng)建和撤銷另一個線程;同一個進程中的多個線程之間可以并發(fā)執(zhí)行。
http://blog.csdn.net/xywlpo/article/details/6749685
http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html