1. 程式人生 > >#java如何減少執行緒上下文切換?本文告訴你答案!

#java如何減少執行緒上下文切換?本文告訴你答案!

如何減少執行緒上下文切換 使用多執行緒時,不是多執行緒能提升程式的執行速度,使用多執行緒是為了更好地利用CPU資源! 如果有正在學java的程式設計師,可來我們的java技術學習扣qun哦:82368,6266裡面免費送java的視訊教程噢! 小編也是一名從事了6年java開發的全棧工程師,花了近一個月整理了一份較適合18年學習的java乾貨,送給每一位java 小夥伴,歡迎初學和進階中的小夥伴。 在這裡插入圖片描述

程式在執行時,多執行緒是CPU通過給每個執行緒分配CPU時間片來實現的,時間片是CPU分配給每個執行緒執行的時間,因時間片非常短,所以CPU通過不停地切換執行緒執行。

執行緒不是越多就越好的,因為執行緒上下文切換是有效能損耗的,在使用多執行緒的同時需要考慮如何減少上下文切換。

一般來說有以下幾條經驗:

無鎖併發程式設計。多執行緒競爭時,會引起上下文切換,所以多執行緒處理資料時,可以用一些辦法來避免使用鎖,如將資料的ID按照Hash取模分段,不同的執行緒處理不同段的資料 CAS演算法。Java的Atomic包使用CAS演算法來更新資料,而不需要加鎖。 在這裡插入圖片描述 控制執行緒數量。避免建立不需要的執行緒,比如任務很少,但是建立了很多執行緒來處理,這樣會造成大量執行緒都處於等待狀態

協程。在單執行緒裡實現多工的排程,並在單執行緒裡維持多個任務間的切換 協程可以看成是使用者態自管理的“執行緒”。不會參與CPU時間排程,沒有均衡分配到時間。非搶佔式的

還可以考慮我們的應用是IO密集型的還是CPU密集型的。

在這裡插入圖片描述 如果是IO密集型的話,執行緒可以多一些。 如果是CPU密集型的話,執行緒不宜太多。