對于單個java應(yīng)用來說,減少線程上下文切換發(fā)生在多線程環(huán)境。題主問如何減少線程上下文切換,那么我們要環(huán)繞這幾個問題討論下。
一,你的應(yīng)用是cpu密集型還是io密集型?
如果你的系統(tǒng)為cpu計算密集型,單個線程的cpu時間片越大越好,這就要求你對線程池的線程數(shù)做限制,防止過多線程對資源進行搶奪。
二,你給系統(tǒng)判定的并發(fā)上限是多少?
每個系統(tǒng)的性能都有上限,過大的負載,會造成性能低下,過小會浪費系統(tǒng)資源,所以需要結(jié)合業(yè)務(wù)得到一個最優(yōu)值。
三,你的系統(tǒng)架構(gòu)是否做了優(yōu)化?
你的系統(tǒng)是否能橫向擴展,盡量在網(wǎng)關(guān),代理層進行流量轉(zhuǎn)發(fā),通過一定的負載均衡算法來降低單個系統(tǒng)的請求量。服務(wù)器的并發(fā)模型很重要,是一線程一請求,還是IO多路復用,還是異步模型,一線程一請求,在并發(fā)量大時,勢必會造成線程切換頻繁。
四,程序是否業(yè)務(wù)可以優(yōu)化?
有些場景,優(yōu)化業(yè)務(wù),可以減少程序的處理性能,降低事務(wù)的處理時間,是否有cpu輪詢,是否在復雜業(yè)務(wù)中大量使用CAS等等。
具體問題具體分析,優(yōu)化是一條持久之路,沒有最優(yōu),只有更優(yōu)。