“並行和併發有什麼區別?” 關於這個問題,很多工作5年以上的同學都回答不出來。 或者說,自己有一定的理解,但是不知道怎麼表達。 大家好,我是Mic,一個工作了14年的Java程式員。 關於這個問題,面試官想考察什麼呢? 問題解析 並行和併發最早其實描述的是Java併發編程裡面的概念。 他們強調的是C ...
“並行和併發有什麼區別?”
關於這個問題,很多工作5年以上的同學都回答不出來。
或者說,自己有一定的理解,但是不知道怎麼表達。
大家好,我是Mic,一個工作了14年的Java程式員。
關於這個問題,面試官想考察什麼呢?
問題解析
並行和併發最早其實描述的是Java併發編程裡面的概念。
他們強調的是CPU處理任務的能力。
簡單來說,併發,就是同一個時刻,CPU能夠處理的任務數量,並且對於應用程式來說,不會出現卡頓現象。
並行,就是同一個時刻,允許多個任務同時執行,在多核CPU架構中,同時執行的任務數量是由核心數決定的,比如在4核4線程的CPU中,只能同時執行4個線程。
這兩個概念看起來類似,但其實描述的緯度是不同的,併發描述的是程式處理能力的視角
並行描述的是CPU處理任務方式的視角,一個是巨集觀層面,一個是微觀層面。
他們兩個又是相輔相成的,CPU並行執行任務的能力,又能提升程式的併發處理性能。
所以多核CPU的性能要比單核CPU好。
當然,如果是單核CPU,也可以通過時間片切換的方式提升併發能力。
Erlang之父Joe Armstrong用了一張圖片解釋了並行和併發的區別。
併發就是兩個隊列交替使用一臺咖啡機,並行是兩個隊列同時使用兩台咖啡機。
所以,在我看來,這個面試題可以很好的考察求職者Java併發編程的理解程度。
網上有很多的文章都在嘗試解釋這個概念,但是這些解釋反而讓這個問題越來越複雜。
我認為只有對線程的底層原理有深度理解,才能很好的回答這個問題。
高手:
並行和併發是Java併發編程裡面的概念。
並行,是指在多核CPU架構下,同一時刻同時可以執行多個線程的能力。
在單核CPU架構中,同一時刻只能運行一個線程。
在4核4線程的CPU架構中,同一時刻可以運行4個線程,那這4個線程就是並行執行的。
併發,是指在同一時刻CPU能夠處理的任務數量,也可以理解成CPU的併發能力。
在單核CPU架構中,操作系統通過CPU時間片機制提升CPU的併發能力
在多核CPU架構中,基於任務的並行執行能力以及CPU時間片切換的能力來提升CPU的併發能力。
所以,總的來說,併發是一個巨集觀概念,它指的是CPU能夠承載的壓力大小,並行是一個微觀概念,它描述CPU同時執行多個任務的能力。
總結
好了,今天的分享就到這裡結束了
如果喜歡我的作品,記得點贊、收藏、關註
需要Java面試題合集掃描下方
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!