漫話:如何給女友解釋什麼是併發和並行


某天下班後,我在家裏進行電話面試,問到面試者這樣一個問題:"能不能簡單介紹一下你理解的併發和並行,並說明一下他們之間的關係"。可是面試者回答的並很差,因此我在面試評價中寫到:"對併發和並行的概念不清楚"。這時,女友看到這句話。面試

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

所謂"同時"進行

咱們如今使用的windows操做系統,是能夠"同時"作不少件事兒的。好比咱們能夠一邊看電影,一邊聊QQ;一邊聽歌,一邊打遊戲。併發

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

實際上,對於單CPU的計算機來講,在CPU中,同一時間是隻能幹一件事兒的。爲了看起來像是「同時幹多件事」,Windows這種操做系統是把CPU的時間劃分紅長短基本相同的時間區間,即」時間片」,經過操做系統的管理,把這些時間片依次輪流地分配給各個應用使用。cdn

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

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

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

因爲計算機的處理速度很快,只要時間片的間隔取得適當,那麼一個用戶做業從用完分配給它的一個時間片到得到下一個CPU時間片,中間有所」停頓」,但用戶察覺不出來。資源

因此,在單CPU的計算機中,咱們看起來「同時幹多件事」,實際上是經過CPU時間片技術,併發完成的。it

併發

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

就想前面提到的操做系統的時間片分時調度。打遊戲和聽音樂兩件事情在同一個時間段內都是在同一臺電腦上完成了從開始到結束的動做。那麼,就能夠說聽音樂和打遊戲是併發的。

並行

並行(Parallel),當系統有一個以上CPU時,當一個CPU執行一個進程時,另外一個CPU能夠執行另外一個進程,兩個進程互不搶佔CPU資源,能夠同時進行,這種方式咱們稱之爲並行(Parallel)。

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

併發與並行

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

仍是咱們兩我的吃午餐。在吃飯過程當中,你吃了米飯、蔬菜、牛肉。我也吃了米飯、蔬菜和牛肉。咱們兩我的之間的吃飯就是並行的。兩我的之間能夠在同一時間點一塊兒吃牛肉,或者一個吃牛肉,一個吃蔬菜。之間是互不影響的。

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

併發和並行的區別

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

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

只有在多CPU的狀況中,纔會發生並行。不然,看似同時發生的事情,其實都是併發執行的。

就像上面這張圖,只有一個咖啡機的時候,一臺咖啡機實際上是在併發被使用的。而有多個咖啡機的時候,多個咖啡機之間纔是並行被使用的。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息