這兩個名詞一定很多人聽過,會不會有人理所當然的把這兩個名詞當成一個意思,其實這兩者有着本質上的區別。
用工作中開發來舉個例子吧。
併發
同一時間有兩個需求,需求A和B分配到了你的手上,而且這兩個需求都很急,你爲這兩個需求分別開了兩個分支A和B,一會兒需求A催你改代碼,你切到了A的分支,一會兒B催你改代碼,你又切到了需求B,你是一個人但是你具有處理併發事件的能力,在兩個需求之間來回穿梭。
那麼並行又是怎麼樣的呢?
並行
同一事件有兩個需求,同樣也很急,但是這個時候你不是一個人在戰鬥了,你有了新同事;需求A分配給了你,需求B分配了你的新同事,那麼你就不用再去關心需求B做了什麼,兩個人分別處理各自在自己的分支上做需求。
最後說說串行,又來了一位新同事,但是是個實習生,你分配了兩個很簡單的任務A和B給他,但是他對切分支這個操作很陌生,他只能在做完了A任務後,才新開了一個分支B去做B任務。
畫圖理解
以前只有一個櫃檯可以買東西,有兩個隊伍,一會兒處理這個隊伍,一會兒處理那個隊伍叫併發。
現在有兩櫃檯了,我只處理我這個隊伍中的人就好了,叫並行。
最後引用深入理解計算機系統CSAPP的回答
併發(Concurrency)是說進程B的開始時間是在進程A的開始時間與結束時間之間,我們就說A和B是併發的。
並行(Parallel Execution)是併發的真子集,指同一時間兩個進程運行在不同的機器上或者同一個機器不同的核心上。
總結
- 併發是一個人做多件事,來回切換。
- 並行是多個人做多件事,互不干涉。
參考資料
文章中出現的任何錯誤歡迎指正,共同進步!
最後做個小小廣告,有對WEB開發和網絡安全感興趣的,可以加羣一起學習和交流!
QQ:425343603