多核情况下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核心,各自的使用情况还有待继续。
关于线程的有好、有意思的博客、资料可以推荐下。