并發(Concurrency)和并行(Parallelism)的區別
最近在讀《real world haskell》里關于并行的一章時,看到作者首先對并發(Concurrency)和并行(Parallelism)的區別進行了定義和解釋。以前我對這個問題也是一知半解,如果有人問題這個問題,恐怕我只能撓頭說不清楚。而在這本書里,作者的解釋是(簡單翻譯):
一個并發程序是指能同時執行通常不相關的各種任務。以一個游戲服務器為例子:它通常是有各種組件組成,每種組件都跟外部世界進行著復雜的信息交互。 一個組件有可能要處理多個用戶聊聊;另外一些可能要處理用戶的輸入,并把最新狀態反饋給用戶;其它的用來進行物理計算。這些都是并發處理。
并發程序并不需要多核處理器。
相比之下,并行程序是用來解決一個單一任務的。以一個試圖預估某支股票價格在下一分鐘波動情況的金融組件為例,如果想最快速度的知道標普 500 中哪知股票應該賣出還是買進,你不能一個一個的計算,而是將這些所有的股票同時計算。這是并行。
</blockquote>其實也不是很好懂,我自己琢磨了一下,大概是這個道理:并發就是一心二用(多用),比如你一邊聽老師講課,一邊低頭看課桌下韓寒的小說。這兩件 事你在同時做,而且這兩件事并不一定需要相關。而并行就是兵分幾路干同一個事情。比如別人看小說只能一行一行的看,而你能一目十行,這就是并行。:) 。
關于并發和并行的區別,Go 語言有一個非常好的教材,叫做“并發不是并行”,它以 Go 語言為例,圖文并茂的為我們講解了并發和并行之間的聯系和區別。
文中使用地鼠燒書為例,通過設計出不同的并發裝書、運書、燒書的流程來比較并發和并行技術的組合運用。原文是英文的,這里是外刊 IT 評論網翻譯的中文版并發不是并行,供大家欣賞。(提示:這個教材使用 HTML5 技術做成了幻燈片的形式,所以你需要使用支持 HTML5 的現代瀏覽器瀏覽。)
來自: 外刊IT評論本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!