并行与并发的区别
?并行與并發的區別
如果某個系統支持兩個或者多個動作(Action)同時存在,那么這個系統就是一個并發系統。如果某個系統支持兩個或者多個動作同時執行,那么這個系統就是一個并行系統。并發系統與并行系統這兩個定義之間的關鍵差異在于“存在”這個詞。
在并發程序中可以同時擁有兩個或者多個線程。這意味著,如果程序在單核處理器上運行,那么這兩個線程將交替地換入或者換出內存。這些線程是同時“存在”的——每個線程都處于執行過程中的某個狀態。如果程序能夠并行執行,那么就一定是運行在多核處理器上。此時,程序中的每個線程都將分配到一個獨立的處理器核上,因此可以同時運行。
我相信你已經能夠得出結論——“并行”概念是“并發”概念的一個子集。也就是說,你可以編寫一個擁有多個線程或者進程的并發程序,但如果沒有多核處理器來執行這個程序,那么就不能以并行方式來運行代碼。因此,凡是在求解單個問題時涉及多個執行流程的編程模式或者執行行為,都屬于并發編程的范疇。
?場景舉例
你吃飯吃到一半,電話來了,你一直到吃完了以后才去接,這就說明你不支持并發也不支持并行。
你吃飯吃到一半,電話來了,你停了下來接了電話,接完后繼續吃飯,這說明你支持并發。
你吃飯吃到一半,電話來了,你一邊打電話一邊吃飯,這說明你支持并行。
并發的關鍵是你有處理多個任務的能力,不一定要同時。
并行的關鍵是你有同時處理多個任務的能力。
所以我認為它們最關鍵的點就是:是否是『同時』。
總結
- 上一篇: LongAdder分段锁机制
- 下一篇: ReentrantLock可以是公平锁,