CPU時間分片、多線程、併發和並行

1、CPU時間分片、多線程?

如果線程數不多於CPU核心數,會把各個線程都分配一個核心,不需分片,而當線程數多於CPU核心數時纔會分片。

2、併發和並行的區別

併發:當有多個線程在操作時,如果系統只有一個CPU,把CPU運行時間劃分成若干個時間片,分配給各個線程執行,在一個時間段的線程代碼運行時,其它線程處於掛起狀態。這種方式我們稱之爲併發(Concurrent)。併發=間隔發生

並行:當系統有一個以上CPU時,則線程的操作有可能非併發。當一個CPU執行一個線程時,另一個CPU可以執行另一個線程,兩個線程互不搶佔CPU資源,可以同時進行,這種方式我們稱之爲並行(Parallel)。 並行=同時進行

區別:並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔內發生。

並行是同時做多件事情。

並發表示同時發生了多件事情,通過時間片切換,哪怕只有單一的核心,也可以實現“同時做多件事情”這個效果。

根據底層是否有多處理器,併發與並行是可以等效的,這並不是兩個互斥的概念。

舉個我們開發中會遇到的例子,我們說資源請求併發數達到了1萬。這裏的意思是有1萬個請求同時過來了。但是這裏很明顯不可能真正的同時去處理這1萬個請求的吧!

如果這臺機器的處理器有4個核心,不考慮超線程,那麼我們認爲同時會有4個線程在跑。也就是說,併發訪問數是1萬,而底層真實的並行處理的請求數是4。

如果併發數小一些只有4的話,又或者你的機器牛逼有1萬個核心,那併發在這裏和並行一個效果。

也就是說,併發可以是虛擬的同時執行,也可以是真的同時執行。而並行的意思是真的同時執行。

結論是:並行是我們物理時空觀下的同時執行,而併發則是操作系統用線程這個模型抽象之後站在線程的視角上看到的“同時”執行。

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