并發(fā)編程之--上下文切換

1.1 上下文切換

? ? ? CPU通過時間片分配算法來循環(huán)執(zhí)行任務(wù),當前任務(wù)執(zhí)行一個時間片后會切換到下一個任務(wù),在切換前會保存上一次任務(wù)的狀態(tài),以便下次切換回來,可以再加載這個任務(wù)的狀態(tài)。所以任務(wù)從保存到再加載的過程的過程就是一次上下文的切換。比如我們在讀一本英文書時,有一個單詞不認識,需要去查字典。在查字典之前,需要記錄下當前書的頁碼,等查完字典后再回來繼續(xù)讀這本書。這樣就是一個切換過程,這樣會影響讀書的效率的。

總結(jié):上下文切換是影響執(zhí)行效率的。

1.2 ?如何減少上下文切換

1.2.1 無鎖并發(fā)編程:多線程競爭鎖,會引起上下文切換。所以無鎖并發(fā)是減少上下文切換的一個好辦法。比如在多線程處理數(shù)據(jù)時,可以將數(shù)據(jù)id按照Hash算法取模分段,不同的線程處理不同段的數(shù)據(jù)。Hash算法

1.2.2 CAS算法:java并發(fā)包下的類進行數(shù)據(jù)更新,不需要加鎖

12.3 不使用線程

1.3 資源限制的問題

單機資源是有限的,可以考慮讓程序在多個機器上運行,比如分布式環(huán)境;也可以使用連接池技術(shù)將資源復(fù)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容