繼續上一篇筆記,晚上處理下關於多核CPU占用率問題。
現代電腦大都是多核電腦。我上一篇寫的程序都只能適合單核單線程的情況。如果我的電腦是多核多線程的情況,那么讓一個線程進入死循環的情況下,電腦是肯定不會滿載。
(關於線程的知識點,如果有好的博客請推薦下)
我的電腦是AMD二核,正常來講ADM的一個核心就是一個線程,Intel是一個核心兩個線程。
一、CPU使用率達到50%
我將上一篇筆記根據時間比重使cpu到達50%的代碼寫成一個線程類
public class MyThread extends Thread { public static final int BUSYTIME=10; public static final int IDLETIME=BUSYTIME; public void run() { while(true){ long startTime=System.currentTimeMillis();//獲取開始時間 while(System.currentTimeMillis()-startTime<=BUSYTIME){ }; try { Thread.sleep(IDLETIME); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
根據電腦情況多開線程,達到了CPU50%的效果(這里不考慮其他進程,所以用資源監視器查看)
public static void main(String[] args) throws InterruptedException { int cpuCount=Runtime.getRuntime().availableProcessors();//獲取當前電腦CPU數量 for (int i = 0; i <cpuCount; i++) { new MyThread().start(); } }

黃線為選中資源
考慮如果讓一個線程的程序死循環,cpu是如何變化的? 結果應該是,CPU的使用率與其可以同時運行的線程數有關。
我重新寫一個死循環的線程類,讓其運行,也可以到達cpu50%的效果。運行兩個個的話,達到滿載的效果即100%。(本機AMD二核二線程)
public class MyFullThread extends Thread { public void run() { int i = 0; while (true) { i++; } } }
即總的有兩個線程的話,
運行一個,50%。
運行兩個,100%。
以下是正弦情況,代碼就不貼了,過程一樣,將上一次的代碼寫成一個線程類,來創建實例。

最后,
對於每一個CPU核心,各自的使用情況還有待繼續。
關於線程的有好、有意思的博客、資料可以推薦下。
