多核情况下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核心,各自的使用情况还有待继续。

关于线程的有好、有意思的博客、资料可以推荐下。

原文地址:https://www.cnblogs.com/xumz/p/7465172.html