1. 程式人生 > >線程和進程的通俗易懂解釋(還有你想看的圖片喲)

線程和進程的通俗易懂解釋(還有你想看的圖片喲)

ces col 情況下 clas 可能 鍵盤輸入 產生 處理 color

  QQ程序如果沒有運行,那它只是程序,而不是進程,一旦運行了QQ程序,那它就成了進程QQ程序一旦運行成了進程,操作系統如windows就要分配給QQ運行的內存空間,CPU運行的時間以及其它資源,這樣QQ程序就可正常運行了。如果要運行其它程序,如殺毒軟件,操作系統也要做同樣的事情。有了進程之後,最大的好處就在於電腦可以同時運行多個程序,每個程序就是一個進程。而如果沒有進程呢,那電腦一次只能運行一個程序,你玩QQ,就不能再同時聽歌、玩遊戲等等;如果你想要聽歌,只能關掉QQ,再打開聽歌曲的軟件進行聽歌了。

  有了進程,可以讓多個程序同時運行,但每一個進程在運行時,一次只能執行一個任務,要想執行第二個任務,只能等第一個任務執行完後,再執行。但在我們現實應用中,就會出現不能等的情況,而是希望一個程序(進程)的多個任務同時執行。為達到這個目的,線程就出現了。線程可以讓一個程序(進程)同時運行多個任務(並發)。比如我們用word程序時(一個進程),可能會存在三個任務:a、接受鍵盤輸入;b、將鍵盤輸入的內容顯示在顯示器上;c、輸入的內容保存在硬盤上。如果沒有線程,那只能是程序先等鍵盤輸入內容,然後過好長時間,再把你輸入的內容顯示在顯示器上,等內容顯示出來了,再將內容保存在硬盤上。但事實上,你在用Word時,一邊輸入,一邊就顯示了,同時也自動保存在硬盤上了(程序可設定自動保存),沒有等待的感覺,這就得歸功於線程的作用了。有了線程之後,你就感覺輸入、顯示、保存好像是同時發生一樣(並發,同一時間,一並發生)。

  線程和進程的作用與區別,一句話概括的話,就是上文中的解釋。以下文字內容與圖片從網上收集,也較通俗地解釋了線程與進程的區別。看完之後,再看網上較專業的解釋就能看得明白了。

進程(process)和線程(thread)是操作系統的基本概念,但是它們比較抽象,不容易掌握。

最近,我讀到一篇材料,發現有一個很好的類比,可以把它們解釋地清晰易懂。

  1.計算機的核心是CPU,它承擔了所有的計算任務。它就像一座工廠,時刻在運行。

技術分享圖片

  2.假定工廠的電力有限,一次只能供給一個車間使用。也就是說,一個車間開工的時候,其他車間都必須停工。背後的含義就是,單個CPU一次只能運行一個任務。

技術分享圖片

  3.進程就好比工廠的車間,它代表CPU所能處理的單個任務。任一時刻,CPU總是運行一個進程,其他進程處於非運行狀態。

技術分享圖片

  4.一個車間裏,可以有很多工人。他們協同完成一個任務。

技術分享圖片

  5.線程就好比車間裏的工人。一個進程可以包括多個線程。

技術分享圖片

  6.車間的空間是工人們共享的,比如許多房間是每個工人都可以進出的。這象征一個進程的內存空間是共享的,每個線程都可以使用這些共享內存。

技術分享圖片

  7.可是,每間房間的大小不同,有些房間最多只能容納一個人,比如廁所。裏面有人的時候,其他人就不能進去了。這代表一個線程使用某些共享內存時,其他線程必須等它結束,才能使用這一塊內存。

技術分享圖片

  8.一個防止他人進入的簡單方法,就是門口加一把鎖。先到的人鎖上門,後到的人看到上鎖,就在門口排隊,等鎖打開再進去。這就叫"互斥鎖"(Mutual[?mju:t?u?l]相互的;共同的 exclusion[?k?sklu:?n]拒絕;排斥,縮寫 Mutex[m‘ju:teks]),防止多個線程同時讀寫某一塊內存區域。

技術分享圖片

  9.還有些房間,可以同時容納n個人,比如廚房。也就是說,如果人數大於n,多出來的人只能在外面等著。這好比某些內存區域,只能供給固定數目的線程使用。

技術分享圖片

  10.這時的解決方法,就是在門口掛n把鑰匙。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處。後到的人發現鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做"信號量"(Semaphore),用來保證多個線程不會互相沖突。

技術分享圖片

  不難看出,mutex是semaphore的一種特殊情況(n=1時)。也就是說,完全可以用後者替代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨占的情況下,還是采用這種設計。

11.操作系統的設計,因此可以歸結為三點:

(1)以多進程形式,允許多個任務同時運行;

(2)以多線程形式,允許單個任務分成不同的部分運行;

(3)提供協調機制,一方面防止進程之間和線程之間產生沖突,另一方面允許進程之間和線程之間共享資源

線程和進程的通俗易懂解釋(還有你想看的圖片喲)