多核情況下cpu占用率曲線-筆記


繼續上一篇筆記,晚上處理下關於多核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核心,各自的使用情況還有待繼續。

關於線程的有好、有意思的博客、資料可以推薦下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM