Window下進程和線程的關係

來源:互聯網
上載者:User

進程是系統分配資源的單位,每一個進程對應與一個活動的程式,當進程啟用時,作業系統就將系統的資源套件括記憶體、I/O和CPU等分配給它,使它執行。  
  線程是CPU分配時間的單位,每一個線程對應於它在進程中的一個函數,也就是記憶體中的程式碼片段,多個線程執行時CPU會根據它們的優先順序分配時間,使它們完成自己的功能。  
  一般來說,進程中至少一個線程,一個主線程和其他線程組成一個進程。多個線程的目的在於分享CPU的時間片,從而完成並行任務。
下面是自己整理的:
 線程和進程的比較:
線程是比進程更小的能獨立啟動並執行基本單位,通常一個進程都有若干個線程,至少也需要一個線程。
1.調度
線程師調度和指派的基本單位,進程是資源擁有的基本單位。
2.並發性
進程之間可以並發執行,在一個進程中的多個線程之間也可以並發執行。
3.擁有資源
進程是擁有資源的一個獨立單元,線程自己不擁有系統資源(也有一點比不可少的資源)但它可以訪問其隸屬進程的資源。
4.系統開銷
建立或撤消進程時,系統都要為之分配或回收資源,如記憶體空間、I/O裝置等,OS所付出的開銷顯著大於在建立或撤消線程時的開銷;進程切換的開銷也遠大於線程切換的開銷。

進程是指在系統中正在啟動並執行一個應用程式;線程是系統分配處理器時間資源的基本單元,或者說進程之內獨立執行的一個單元。對於作業系統而言其調度單元是線程。一個進程至少包括一個線程,通常將該線程稱為主線程。一個進程從主線程的執行開始進而建立一個或多個附加線程,就是所謂基於多線程的多任務。

  那進程與線程的區別到底是什嗎?進程是執行程式的執行個體。例如,當你運行記事本程式(Nodepad)時,你就建立了一個用來容納組成Notepad.exe的代碼及其所需調用動態連結程式庫的進程。每個進程均運行在其專用且受保護的地址空間內。因此,如果你同時運行記事本的兩個拷貝,該程式正在使用的資料在各自執行個體中是彼此獨立的。在記事本的一個拷貝中將無法看到該程式的第二個執行個體開啟的資料。

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

  實際上線程運行而進程不運行。兩個進程彼此獲得專用資料或記憶體的唯一途徑就是通過協議來共用記憶體塊。這是一種協作策略。下面讓我們分析一下工作管理員裡的進程選項卡。

  這裡的進程是指一系列進程,這些進程是由它們所啟動並執行可執行程式執行個體來識別的,這就是進程選項卡中的第一列給出了映射名稱的原因。請注意,這裡並沒有進程名稱列。進程並不擁有獨立於其所歸屬執行個體的映射名稱。換言之
,如果你運行5個記事本拷貝,你將會看到5個稱為Notepad.exe的進程。它們是如何彼此區別的呢?其中一種方式是通過它們的進程ID,因為每個進程都擁有其獨一無二的編碼。該進程ID由Windows NT或Windows 2000產生,並可以迴圈使用。因此,進程ID將不會越編越大,它們能夠得到迴圈利用。第三列是被進程中的線程所佔用的CPU時間百分比。它不是CPU的編號,而是被進程佔用的CPU時間百分比。此時我的系統基本上是閒置。儘管系統看上去每一秒左右都只使用一小部分CPU時間,但該系統空閑進程仍舊耗用了大約99%的CPU時間。

  第四列,CPU時間,是CPU被進程中的線程累計佔用的小時、分鐘及秒數。請注意,我對進程中的線程使用佔用一詞。這並不一定意味著那就是進程已耗用的CPU時間總和,因為,如我們一會兒將看到的,NT計時的方式是,當特定的時鐘間隔激發時,無論誰恰巧處於當前的線程中,它都將計算到CPU周期之內。通常情況下,在大多數NT系統中,時鐘以10毫秒的間隔運行。每10毫秒NT的心臟就跳動一下。有一些驅動程式程式碼片段運行並顯示誰是當前的線程。讓我們將CPU時間的最後10毫秒記在它的帳上。因此,如果一個線程開始運行,並在持續運行8毫秒後完成,接著,第二個線程開始運行並持續了2毫秒,這時,時鐘激發,請猜一猜這整整10毫秒的刻度到底記在了哪個線程的帳上?答案是第二個線程。因此,NT中存在一些固有的不準確性,而NT恰是以這種方式進行計時,實際情況也如是,大多數32位作業系統中都存在一個基於間隔的計時機制。請記住這一點,因為,有時當你觀察線程所耗用的CPU總和時,會出現儘管該線程或許看上去已運行過數十萬次,但其CPU時間佔用量卻可能是零或非常短暫的現象,那麼,上述解釋便是原因所在。上述也就是我們在工作管理員的進程選項卡中所能看到的基本資料列。

根據作業系統的定義,進程是系統資源管理的最小單位,線程是程式執行的最小單位。線程和進程十分相似,不同的只是線程比進程小。

首先,線程採用了多個線程可共用資源的設計思想。例如,它們的操作大部分都是在同一地址空間進行的。其次,從一個線程切換到另一線程所花費的代價比進程低。再次,進程本身的資訊在記憶體中佔用的空間比線程大。

因此,線程更能允分地利用記憶體。線程可以看作是在進程內部執行的指定序列。線程和進程的最大區別在於線程完全共用相同的地址空間,運行在同一地址上。

進程是系統分配資源的單位,每一個進程對應與一個活動的程式,當進程啟用時,作業系統就將系統的資源套件括記憶體、I/O和CPU等分配給它,使它執行。
線程是CPU分配時間的單位,每一個線程對應於它在進程中的一個函數,也就是記憶體中的程式碼片段,多個線程執行時CPU會根據它們的優先順序分配時間,使它們完成自己的功能。
進程是分配資源的基本單位,線程是調度與執行的基本單位.


 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.