如何解釋什么是並發和並行


並發和並行最開始都是操作系統中的概念,表示的是CPU執行多個任務的方式。這兩個概念極容易混淆。

所謂"同時"進行

我們現在使用的windows操作系統,是可以"同時"做很多件事兒的。比如我們可以一邊看電影,一邊聊QQ;一邊聽歌,一邊打游戲。

但是,這所謂的"同時",在操作系統底層可能並不是真正的意義上的"同時"。

實際上,對於單CPU的計算機來說,在CPU中,同一時間是只能干一件事兒的。為了看起來像是“同時干多件事”,Windows這種操作系統是把CPU的時間划分成長短基本相同的時間區間,即”時間片”,通過操作系統的管理,把這些時間片依次輪流地分配給各個應用使用。

這樣,給用戶的感覺是他在同時的進行聽歌和打游戲,實際上,在操作系統中,CPU是在游戲進程和音樂播放器進程之間來回切換執行的。

操作系統時間片的使用是有規則的:某個作業在時間片結束之前,整個任務還沒有完成,那么該作業就被暫停下來,放棄CPU,等待下一輪循環再繼續做。此時CPU又分配給另一個作業去使用。

我們把目光聚焦在CPU的執行上,把這個過程放大的話,CPU就好像是一個電話亭。多個用戶並不是同一時間在使用這個電話亭中的電話的,而是輪流使用的。

由於計算機的處理速度很快,只要時間片的間隔取得適當,那么一個用戶作業從用完分配給它的一個時間片到獲得下一個CPU時間片,中間有所”停頓”,但用戶察覺不出來。

所以,在單CPU的計算機中,我們看起來“同時干多件事”,其實是通過CPU時間片技術,並發完成的。

 

並發

並發(Concurrent),在操作系統中,是指一個時間段中有幾個程序都處於已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行。

就想前面提到的操作系統的時間片分時調度。打游戲和聽音樂兩件事情在同一個時間段內都是在同一台電腦上完成了從開始到結束的動作。那么,就可以說聽音樂和打游戲是並發的。

並行

並行(Parallel),當系統有一個以上CPU時,當一個CPU執行一個進程時,另一個CPU可以執行另一個進程,兩個進程互不搶占CPU資源,可以同時進行,這種方式我們稱之為並行(Parallel)。

這里面有一個很重要的點,那就是系統要有多個CPU才會出現並行。在有多個CPU的情況下,才會出現真正意義上的『同時進行』。

並發與並行

我們兩個人在吃午飯。你在吃飯的整個過程中,吃了米飯、吃了蔬菜、吃了牛肉。吃米飯、吃蔬菜、吃牛肉這三件事其實就是並發執行的。對於你來說,整個過程中看似是同時完成的的。但其實你是在吃不同的東西之間來回切換的。

還是我們兩個人吃午飯。在吃飯過程中,你吃了米飯、蔬菜、牛肉。我也吃了米飯、蔬菜和牛肉。我們兩個人之間的吃飯就是並行的。兩個人之間可以在同一時間點一起吃牛肉,或者一個吃牛肉,一個吃蔬菜。之間是互不影響的。

 

 

所以,並發是指在一段時間內宏觀上多個程序同時運行。並行指的是同一個時刻,多個任務確實真的在同時運行。

 

並發和並行的區別

並發,指的是多個事情,在同一時間段內同時發生了。  
並行,指的是多個事情,在同一時間點上同時發生了。

並發的多個任務之間是互相搶占資源的。  
並行的多個任務之間是不互相搶占資源的、

只有在多CPU的情況中,才會發生並行。否則,看似同時發生的事情,其實都是並發執行的。

 

原創: 漫話編程 漫話編程 11月5日

[轉載來源]-漫話編程--微信:mhcoding


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM