如何給女朋友解釋什麼是併發和並行
某天下班後,我在家裡進行電話面試,問到面試者這樣一個問題:"能不能簡單介紹一下你理解的併發和並行,並說明一下他們之間的關係"。但是面試者回答的並不好,所以我在面試評價中寫到:"對併發和並行的概念不清楚"。這時,女朋友看到這句話。
併發和並行最開始都是作業系統中的概念,表示的是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的情況中,才會發生並行。否則,看似同時發生的事情,其實都是併發執行的。
就像上面這張圖,只有一個咖啡機的時候,一臺咖啡機其實是在併發被使用的。而有多個咖啡機的時候,多個咖啡機之間才是並行被使用的。
PS:如果覺得我的分享不錯,歡迎大家隨手點贊、轉發。
(完)
Java團長
專注於Java乾貨分享
掃描上方二維碼獲取更多Java乾貨
相關文章
- 漫話:如何給女朋友解釋什麼是併發和並行並行
- 如何給女朋友解釋什麼是RPCRPC
- 漫話:如何給女朋友解釋什麼是Git和GitHub?Github
- 如何給女朋友解釋什麼是分散式和叢集?分散式
- 漫話:如何給女朋友解釋什麼是HTTPHTTP
- 漫話:如何給女朋友解釋什麼是反向代理?
- 漫話:如何給女朋友解釋什麼是策略模式?模式
- 漫話:如何給女朋友解釋什麼是分散式和叢集?分散式
- 圖文詳解:如何給女朋友解釋什麼是微服務?微服務
- 漫話:如何給女朋友解釋什麼是單例模式?單例模式
- 漫話:如何給女朋友解釋什麼是系統可用性?
- 如何給女朋友解釋什麼是Linux的五種IO模型?Linux模型
- 給女朋友講解什麼是代理模式模式
- 如何給女朋友解釋什麼是IO中的阻塞、非阻塞、同步、非同步?非同步
- 漫話:如何給女朋友解釋什麼是Linux的五種IO模型?Linux模型
- 給女朋友講解什麼是Optional【JDK 8特性】JDK
- 漫話:給女朋友解釋GC如何判斷什麼東西可以回收?GC
- 漫話:給女朋友解釋為什麼隨機播放歌曲並不隨機隨機
- 漫話:如何給女朋友解釋為什麼有些網站域名不以www開頭網站
- 漫話:如何給女朋友解釋為什麼雙11無法修改收貨地址
- 什麼是高併發,怎麼解決高併發
- 怎麼向女朋友解釋什麼叫區塊鏈?區塊鏈
- 如何通俗解釋Docker是什麼_1Docker
- 漫話:如何給女朋友解釋為什麼Windows上面的軟體都想把自己安裝在C盤Windows
- 如何向親戚朋友解釋什麼是IP,埠和域名
- 架構之:併發和並行架構並行
- 深入理解併發和並行並行
- 未來的女朋友是什麼樣
- 什麼是併發連線數和請求數
- 給女朋友講ActiveMQ是啥?MQ
- 漫話:如何給女朋友解釋為什麼12306會使用者資訊洩露(上)——密碼篇密碼
- java高併發,如何解決,什麼方式解決Java
- 什麼是並行查詢及其原理並行
- 通過程式碼解釋什麼是API,什麼是SDK?API
- java多執行緒詳解(併發,並行,同步)Java執行緒並行
- Java併發(一)----程式、執行緒、並行、併發Java執行緒並行
- 【多執行緒與高併發】Java守護執行緒是什麼?什麼是Java的守護執行緒?執行緒Java
- 快速理解併發、並行並行