在《Java并發(fā)編程的藝術(shù)》這本書的1.1.4章節(jié)"減少上下文切換實戰(zhàn)"中舉了一個例子,起初dump jboss進程時發(fā)現(xiàn)有300+個worker線程處于 waiting 狀態(tài),然后通過減少線程池的線程最大數(shù)量來減少處于 waiting 狀態(tài)的線程數(shù)量,意思是這樣就能減少上下文切換的次數(shù)了。
但是我有一點不太明白,如果大量線程處于 waiting 狀態(tài)而請求數(shù)又少的話,那么OS從300個waiting線程中選一個處理請求跟從100個 waiting 線程中選一個不都是只有1次上下文切換嗎;如果新到10個請求,那么無論你處于 waiting 的線程有多少,進行上下文切換的也只有個10個線程吧,線程數(shù)量多增加的是內(nèi)存占用,跟調(diào)度開銷有什么直接關(guān)系嗎
2 回答

MYYA
TA貢獻1868條經(jīng)驗 獲得超4個贊
原因很簡單,因為操作系統(tǒng)需要對線程進行維護的(而不論這個線程出于什么樣的狀態(tài))
所以線程越多,操作系統(tǒng)的開銷確實是越大的
添加回答
舉報
0/150
提交
取消