posts - 12,  comments - 2,  trackbacks - 0
          轉(zhuǎn)自:http://www.cnblogs.com/sideandside/archive/2007/04/04/699637.html

                  進(jìn)程是系統(tǒng)分配資源的單位,每一個進(jìn)程對應(yīng)與一個活動的程序,當(dāng)進(jìn)程激活時,操作系統(tǒng)就將系統(tǒng)的資源包括內(nèi)存、I/O和CPU等分配給它,使它執(zhí)行。線程是CPU分配時間的單位,每一個線程對應(yīng)于它在進(jìn)程中的一個函數(shù),也就是內(nèi)存中的代碼段,多個線程執(zhí)行時CPU會根據(jù)它們的優(yōu)先級分配時間,使它們完成自己的功能。 一般來說,進(jìn)程中至少一個線程,一個主線程和其他線程組成一個進(jìn)程。多個線程的目的在于分享CPU的時間片,從而完成并行任務(wù)。
          下面是自己整理的:
           線程和進(jìn)程的比較:
          線程是比進(jìn)程更小的能獨立運行的基本單位,通常一個進(jìn)程都有若干個線程,至少也需要一個線程。
                  1.調(diào)度
          線程師調(diào)度和分派的基本單位,進(jìn)程是資源擁有的基本單位。
                  2.并發(fā)性
          進(jìn)程之間可以并發(fā)執(zhí)行,在一個進(jìn)程中的多個線程之間也可以并發(fā)執(zhí)行。
                  3.擁有資源
          進(jìn)程是擁有資源的一個獨立單元,線程自己不擁有系統(tǒng)資源(也有一點比不可少的資源)但它可以訪問其隸屬進(jìn)程的資源。
                  4.系統(tǒng)開銷
          創(chuàng)建或撤消進(jìn)程時,系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/O設(shè)備等,OS所付出的開銷顯著大于在創(chuàng)建或撤消線程時的開銷;進(jìn)程切換的開銷也遠(yuǎn)大于線程切換的開銷。

                  進(jìn)程是指在系統(tǒng)中正在運行的一個應(yīng)用程序;線程是系統(tǒng)分配處理器時間資源的基本單元,或者說進(jìn)程之內(nèi)獨立執(zhí)行的一個單元。對于操作系統(tǒng)而言其調(diào)度單元是線程。一個進(jìn)程至少包括一個線程,通常將該線程稱為主線程。一個進(jìn)程從主線程的執(zhí)行開始進(jìn)而創(chuàng)建一個或多個附加線程,就是所謂基于多線程的多任務(wù)。
            那進(jìn)程與線程的區(qū)別到底是什么?進(jìn)程是執(zhí)行程序的實例。例如,當(dāng)你運行記事本程序(Nodepad)時,你就創(chuàng)建了一個用來容納組成Notepad.exe的代碼及其所需調(diào)用動態(tài)鏈接庫的進(jìn)程。每個進(jìn)程均運行在其專用且受保護(hù)的地址空間內(nèi)。因此,如果你同時運行記事本的兩個拷貝,該程序正在使用的數(shù)據(jù)在各自實例中是彼此獨立的。在記事本的一個拷貝中將無法看到該程序的第二個實例打開的數(shù)據(jù)。

            以沙箱為例進(jìn)行闡述。一個進(jìn)程就好比一個沙箱。線程就如同沙箱中的孩子們。孩子們在沙箱子中跑來跑去,并且可能將沙子攘到別的孩子眼中,他們會互相踢打或撕咬。但是,這些沙箱略有不同之處就在于每個沙箱完全由墻壁
          和頂棚封閉起來,無論箱中的孩子如何狠命地攘沙,他們也不會影響到其它沙箱中的其他孩子。因此,每個進(jìn)程就象一個被保護(hù)起來的沙箱。未經(jīng)許可,無人可以進(jìn)出。

            實際上線程運行而進(jìn)程不運行。兩個進(jìn)程彼此獲得專用數(shù)據(jù)或內(nèi)存的唯一途徑就是通過協(xié)議來共享內(nèi)存塊。這是一種協(xié)作策略。下面讓我們分析一下任務(wù)管理器里的進(jìn)程選項卡。

            這里的進(jìn)程是指一系列進(jìn)程,這些進(jìn)程是由它們所運行的可執(zhí)行程序?qū)嵗齺碜R別的,這就是進(jìn)程選項卡中的第一列給出了映射名稱的原因。請注意,這里并沒有進(jìn)程名稱列。進(jìn)程并不擁有獨立于其所歸屬實例的映射名稱。換言之
          ,如果你運行5個記事本拷貝,你將會看到5個稱為Notepad.exe的進(jìn)程。它們是如何彼此區(qū)別的呢?其中一種方式是通過它們的進(jìn)程ID,因為每個進(jìn)程都擁有其獨一無二的編碼。該進(jìn)程ID由Windows NT或Windows 2000生成,并可以循環(huán)使用。因此,進(jìn)程ID將不會越編越大,它們能夠得到循環(huán)利用。第三列是被進(jìn)程中的線程所占用的CPU時間百分比。它不是CPU的編號,而是被進(jìn)程占用的CPU時間百分比。此時我的系統(tǒng)基本上是空閑的。盡管系統(tǒng)看上去每一秒左右都只使用一小部分CPU時間,但該系統(tǒng)空閑進(jìn)程仍舊耗用了大約99%的CPU時間。

            第四列,CPU時間,是CPU被進(jìn)程中的線程累計占用的小時、分鐘及秒數(shù)。請注意,我對進(jìn)程中的線程使用占用一詞。這并不一定意味著那就是進(jìn)程已耗用的CPU時間總和,因為,如我們一會兒將看到的,NT計時的方式是,當(dāng)特定的時鐘間隔激發(fā)時,無論誰恰巧處于當(dāng)前的線程中,它都將計算到CPU周期之內(nèi)。通常情況下,在大多數(shù)NT系統(tǒng)中,時鐘以10毫秒的間隔運行。每10毫秒NT的心臟就跳動一下。有一些驅(qū)動程序代碼片段運行并顯示誰是當(dāng)前的線程。讓我們將CPU時間的最后10毫秒記在它的帳上。因此,如果一個線程開始運行,并在持續(xù)運行8毫秒后完成,接著,第二個線程開始運行并持續(xù)了2毫秒,這時,時鐘激發(fā),請猜一猜這整整10毫秒的時鐘周期到底記在了哪個線程的帳上?答案是第二個線程。因此,NT中存在一些固有的不準(zhǔn)確性,而NT恰是以這種方式進(jìn)行計時,實際情況也如是,大多數(shù)32位操作系統(tǒng)中都存在一個基于間隔的計時機制。請記住這一點,因為,有時當(dāng)你觀察線程所耗用的CPU總和時,會出現(xiàn)盡管該線程或許看上去已運行過數(shù)十萬次,但其CPU時間占用量卻可能是零或非常短暫的現(xiàn)象,那么,上述解釋便是原因所在。上述也就是我們在任務(wù)管理器的進(jìn)程選項卡中所能看到的基本信息列。

          posted on 2011-03-31 10:55 遠(yuǎn)帆 閱讀(483) 評論(0)  編輯  收藏 所屬分類: 操作系統(tǒng)

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 福海县| 交城县| 石城县| 梁平县| 南阳市| 宜都市| 儋州市| 保定市| 扎赉特旗| 京山县| 米易县| 包头市| 杭州市| 句容市| 霍林郭勒市| 都江堰市| 定结县| 乌兰县| 治多县| 衡东县| 松江区| 阿合奇县| 绵阳市| 平定县| 文昌市| 马鞍山市| 扶风县| 鄢陵县| 鹿泉市| 马关县| 姜堰市| 长宁县| 灌云县| 仁怀市| 巩留县| 普兰店市| 安阳县| 江西省| 洛阳市| 海南省| 惠州市|