1. 程式人生 > >多進程與多線程的區別

多進程與多線程的區別

url 啟動 htm word .com 思想 屬於 多個 程序

多進程與多線程的區別

進程是程序在計算機上的一次執行活動。當你運行一個程序,你就啟動了一個進程。顯然,程序是死的(靜態的),進程是活的(動態的)。進程可以分為系統進程和用戶進程。凡是用於完成操作系統的各種功能的進程就是系統進程,它們就是處於運行狀態下的操作系統本身;所有由你啟動的進程都是用戶進程。進程是操作系統進行資源分配的單位。在Windows下,進程又被細化為線程,也就是一個進程下有多個能獨立運行的更小的單位。

在同一個時間裏,同一個計算機系統中如果允許兩個或兩個以上的進程處於運行狀態,這便是多任務。現代的操作系統幾乎都是多任務操作系統,能夠同時管理多個進程的運行。多任務帶來的好處是明顯的,比如你可以邊聽mp3邊上網,與此同時甚至可以將下載的文檔打印出來,而這些任務之間絲毫不會相互幹擾。那麽這裏就涉及到並行的問題,俗話說,一心不能二用,這對計算機也一樣,原則上一個CPU只能分配給一個進程,以便運行這個進程。我們通常使用的計算機中只有一個CPU,也就是說只有一顆心,要讓它一心多用,同時運行多個進程,就必須使用並發技術

。實現並發技術相當復雜,最容易理解的是“時間片輪轉進程調度算法”,它的思想簡單介紹如下:在操作系統的管理下,所有正在運行的進程輪流使用CPU,每個進程允許占用CPU的時間非常短(比如10毫秒),這樣用戶根本感覺不出來CPU是在輪流為多個進程服務,就好象所有的進程都在不間斷地運行一樣。但實際上在任何一個時間內有且僅有一個進程占有CPU。如果一臺計算機有多個CPU,情況就不同了,如果進程數小於CPU數,則不同的進程可以分配給不同的CPU來運行,這樣,多個進程就是真正同時運行的,這便是並行。但如果進程數大於CPU數,則仍然需要使用並發技術。在Windows中,進行CPU分配是以線程為單位的,一個進程可能由多個線程組成,這時情況更加復雜,但簡單地說,有如下關系:

  • 總線程數<= CPU數量:並行運行
  • 總線程數 > CPU數量:並發運行

並行運行的效率顯然高於並發運行,所以在多CPU的計算機中,多任務的效率比較高。但是,如果在多CPU計算機中只運行一個進程

(線程),就不能發揮多CPU的優勢。這裏涉及到多任務操作系統的問題,多任務操作系統(如Windows)基本原理是:操作系統將CPU

的時間片分配給多個線程,每個線程在操作系統指定的時間片內完成(註意,這裏的多個線程是分屬於不同進程的).操作系統不斷的從一個線程的執行切換到另一個線程的執行,如此往復,宏觀上看來,就好像是多個線程在一起執行.由於這多個線程分屬於不同的進程,因此在我們看來,就好像是多個進程在同時執行,這樣就實現了多任務。

----------------------------------------------------------

進程是資源分配的最小單位,線程是CPU調度的最小單位;進程編程調試簡單可靠性高,但是創建銷毀開銷大;線程正相反,開銷小,切換速度快,但是編程調試相對復雜。

多進程與多線程的區別