執行緒的併發、並行以及高併發
併發:
當多個執行緒在操作的時候,如果系統只有一個CPU,同一時刻就只有一條執行緒指令在執行,但是各個執行緒指令被快速的輪換執行,這就是的巨集觀上看起來是多個執行緒在同時執行。但微觀上並不是這樣,只是將時間分成若干個片段,多個執行緒交替執行。
如圖系統只有1個CPU,執行緒就要通過競爭得到執行機會。誰得到CPU誰就執行。
並行:
如果系統有1個以上的CPU,則系統的執行緒有可能非併發而是並行。當一個CPU執行一個執行緒時,另一個CPU也在執行另外的執行緒,兩個執行緒互不爭奪CPU資源,可以同時進行,這就稱為並行。
這就是和併發不同之處,同一時刻執行緒指令都在執行。
高併發:
是指短時間內大量的訪問和請求,例如雙十一。想系統能夠適應高併發狀態,則需要全面優化優化,包括,硬體、網路、系統架構、開發語言的選取、資料結構的運用、演算法優化、資料庫優化……而多執行緒只是其中解決方法之一。
多執行緒在高併發問題中起到的作用是使計算機資源在每一時刻能達到最大利用率,不至於浪費計算機資源使其閒置。
通過多執行緒實現併發/並行:
1.Thread類定義實現了多執行緒,通過多執行緒可以實現併發或者並行。
2.在CPU比較繁忙資源不足的時候,作業系統只為一個含有多執行緒的程序分配僅有的CPU資源,這些執行緒就會自己爭奪時間片。這就是多執行緒實現併發,執行緒之間爭奪CPU資源獲得執行機會。
3.在CPU資源較足的時候,一個程序內的多執行緒,可以被分配到不同的CPU資源,這就是多執行緒實現並行。
4.至於多執行緒實現的究竟是併發還是並行?前面兩點提到的說明這是都有可能的。因為多執行緒可能被分配到一個CPU核心執行,也可能被分配到不同的CPU資源中執行。然而這個過程是作業系統乾的,不關我的事。所以我也不確定最後究竟是併發還是並行。
5.不管是併發還是並行,都提高了對CPU資源的利用率,最大限度的利用了CPU資源。