並行 和 併發的區別

  • 如果某個系統支持兩個或者多個動作(Action)同時存在,那麼這個系統就是一個併發系統。

  • 如果某個系統支持兩個或者多個動作同時執行,那麼這個系統就是一個並行系統。

併發系統與並行系統這兩個定義之間的關鍵差異在於“存在”這個詞。
在併發程序中可以同時擁有兩個或者多個線程。
這意味着,如果程序在單核處理器上運行,那麼這兩個線程將交替地換入或者換出內存。
這些線程是同時“存在”的——每個線程都處於執行過程中的某個狀態。
如果程序能夠並行執行,那麼就一定是運行在多核處理器上。
此時,程序中的每個線程都將分配到一個獨立的處理器核上,因此可以同時運行。

我相信你已經能夠得出結論——“並行”概念是“併發”概念的一個子集。
也就是說,你可以編寫一個擁有多個線程或者進程的併發程序,但如果沒有多核處理器來執行這個程序,那麼就不能以並行方式來運行代碼。
因此,凡是在求解單個問題時涉及多個執行流程的編程模式或者執行行爲,都屬於併發編程的範疇。

摘自:《併發的藝術》 — 〔美〕佈雷謝斯在豆瓣閱讀書店查看:https://read.douban.com/ebook/1

在這裏插入圖片描述

  • 並行是兩個隊列 同時 使用兩臺咖啡機

  • 併發是兩個隊列 交替 使用一臺咖啡機

併發和並行都可以是很多個線程,就看這些線程難能不能同時被(多個)CPU執行,如果可以就說明是並行,而併發是多個線程被(一個)CPU輪流切換着執行。

摘選自 知乎評論https://www.zhihu.com/question/33515481/answer/105348019


  • 併發(Concurrent):指兩個或多個事件在同一時間間隔內發生,即交替做不同事的能力,多線程是併發的一種形式。例如垃圾回收時,用戶線程與垃圾收集線程同時執行(但不一定是並行的,可能會交替執行),用戶程序在繼續運行,而垃圾收集程序運行於另一個CPU上。

  • 並行(Parallel):指兩個或者多個事件在同一時刻發生,即同時做不同事的能力。例如垃圾回收時,多條垃圾收集線程並行工作,但此時用戶線程仍然處於等待狀態。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章