小議 Thread.sleep(0) 造成 CPU佔用率高的問題
首先,我們要清楚相關概念:
1.CPU使用率其實就是你執行的程式佔用的CPU資源,表示你的機器在某個時間點的執行程式的情況。使用率越
高,說明你的機器在這個時間上執行了很多程式,反之較少。使用率的高低與你的CPU強弱有直接關係。現代分時
多工作業系統對 CPU 都是分時間片使用的:比如A程式佔用10ms,然後B程式佔用30ms,然後空閒60ms,再又
是A程式佔10ms,B程式佔30ms,空閒60ms;如果在一段時間內都是如此,那麼這段時間內的佔用率為40%。CPU
對執行緒的響應並不是連續的,通常會在一段時間後自動中斷執行緒。未響應的執行緒增加,就會不斷加大CPU的佔用。
《來自百度百科》
2.Thread.sleep(0)的作用不是單單的說執行緒睡了0ms,它會硬性觸發CPU的一個動作-------計算所有等待執行緒的優先
級,以確定下一個CPU控制權的獲得者。
好,這小動作理論上對於搶佔式執行緒來說是有良好的影響的:
1.避免了某一執行緒長時間霸佔CPU資源
2.避免了執行緒假死
3.讓執行緒可以有比較平均的機會獲得CPU資源
但是最近發現一個問題,當在一個多執行緒執行的平臺的執行緒裡面加入sleep(0)之後出現了兩種情況:
1.執行緒空跑的時候CPU佔用率很高,甚至滿了,但執行緒沒死,平臺沒死;
2.所有執行緒都在跑任務的時候,CPU佔用率不高,很正常。那為什麼會出現這樣的情況?
我是這樣理解的:
1.執行緒空跑:由於每條執行緒都加了sleep(0),所以執行緒的唯一動作就是觸發cpu去計算優先順序,不斷的計算,這樣cpu
基本是沒有空閒的時間,導致了cpu佔用率居高不下。
2.執行緒跑任務:執行緒開始到執行緒結束是有一段時間間隔的,而且根據不同的環境情況間隔會有長有短,就是說線上程
執行的時間裡面,不會觸發cpu計算優先順序,這樣計算的次數減少, 間隔增大,而且,在大量執行緒再跑的時候,等待
的執行緒少了甚至都在執行了,這樣cpu空閒的時間就出來了,所以cpu 的佔用率就不高了。
所以,Thread.sleep(0) 是個好東西,但要用在合適的地方才能很好的發揮它的作用。
首先可以確定的是Thread.sleep(0)是比較的耗資源的,所以不可以濫用,上面的例子屬於濫用了,把sleep(0)放到了
每條執行緒,然後沒必要頻繁的計算等待執行緒的優先順序,不僅僅會出現兩極分化情況,還很耗資源。
我的想法是這樣的;
建立一條工作執行緒之外的執行緒,由它定時來負責這個事兒,這樣把消耗減到最少,而且有保證了工作執行緒的健康存
活,這樣在空閒或繁忙的情況下CPU佔用率會比較穩定。
(個人想法,如有不同想法,希望交流 )
相關文章
- oracle_CPU佔用率高時的問題定位Oracle
- 解決WinXP中CPU佔用率過高的問題(MaxWorkitems)(轉)
- 解決Windows XP中CPU佔用率過高的問題(轉)Windows
- cpu佔用率100%怎麼解決 cpu佔用率高怎麼辦
- 禁用software_reporter_tool.exe 解決CPU高佔用率的問題
- cpu使用率過高問題(Java)Java
- java應用CPU佔用率過高排查Java
- 如何解決cpu使用率過高的問題
- Oracle CPU使用率過高問題處理Oracle
- windows10cpu佔用率高怎麼辦Windows
- Linux系統中CPU佔用率較高問題排查思路與解決方法Linux
- 診斷和解決CPU利用率高的問題(zt)
- Node.js 應用高 CPU 佔用率的分析方法Node.js
- CPU資源佔用100%怎麼辦?cpu佔用率高的解決辦法
- Java中的CPU佔用高和記憶體佔用高的問題排查Java記憶體
- sqlplus命令無響應,cpu佔用率很高的問題處理SQL
- win10解決antimalware service executable cpu佔用率高的方法Win10
- mysql中CPU或記憶體利用率過高問題MySql記憶體
- win10空閒cpu很多cpu佔滿怎麼辦 win10cpu佔用率高怎麼辦Win10
- 欄位字元型別不匹配導致CPU佔用率高字元型別
- 【RAC】處理因ons導致CPU使用率過高的問題
- rundll32.exe程式佔用率CPU高的原因及解決方法
- win10系統keyshot佔用率高cpu怎麼辦_win10 keyshot佔用率100%cpu處理方法Win10
- Nodejs mkdirP 模組導致CPU佔用高的問題NodeJS
- 微軟新補丁與Outlook衝突 CPU佔用率高達99%微軟
- 面試問題---JAVA程式CPU佔用過高怎麼定位面試Java
- 關於vmstat,top,ps aux檢視的cpu佔用率不一致的問題UX
- 恆訊科技分析:如何解決SQL Server CPU使用率過高的問題?SQLServer
- 記一次資料庫高CPU佔用率處理過程資料庫
- Linux下xorg程式CPU佔用率過高時的一個解決方案Linux
- win10系統defender antivirus cpu佔用率過高怎麼解決Win10
- ORACLE CPU佔率高的程式Oracle
- CPU使用率低負載高負載
- Java程式CPU使用率高排查Java
- MySQL5.6.12造成CPU的使用率 2000%的原因MySql
- 關於CPU使用率高的awr分析
- 微軟將在9月中旬修復CPU利用率飆高的問題微軟
- 檢視程式cpu和記憶體佔用率記憶體