您的位置:首页 > 其它

多核情况下cpu占用率曲线-笔记

2017-09-01 21:38 246 查看
继续上一篇笔记,晚上处理下关于多核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核心,各自的使用情况还有待继续。

关于线程的有好、有意思的博客、资料可以推荐下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: