《编程之美》——CPU使用率

今天开始接触到编程之美这本书

书的一开始就讲到一个问题,怎样让自己的CPU使用率保持在50%,真是个让人匪夷所思的问题不是么

这里简单的介绍一下我的电脑  ThinkpadE420  普通的办公本   i5-2430处理器  双核四线程

对于单核单线程的电脑而言,当我们写入一个死循环的时候,CPU占用率会直接飙升到100%

而对于双核四线程而言,一个死循环会使得CPU占用率到达25%

也很容易理解,就是相当于把100%分成一个四分

所以这里最简单实现CPU占用率100%的途径就是跑两个死循环,这时候就会出现锯齿波动的cpu 50%图  如下所示

    public class CPUTest {  
        public static void main(String[] args) {  
            int busyTime = 10;  
            int idleTime = busyTime;  
            long startTime = 0; 
			new Thread(new Runnable() {
				@Override
				public void run() {
					while(true) {
					}	
				}
			}).start();
            while (true) {  
            }  
        }  
    }  



当然这不是一个很好的方式,不能适应CPU的变化

下面我们用另一种方式来模拟CPU占用率12.5%的情况,因为我的电脑是双核四线程,我们把25%看做一个单独的电脑,12.5%就是其中的50%

在java 中有 System.currentTimeMillis()用来获取开机到当前时间经过的毫秒数,对应C 中 GetTickCount方法

windows调度时间片约为10ms,为了达到50%的目的,我们让cpu在这个10ms执行空操作,下个10ms睡眠,这样就达到了50%的目的

    public class CPUTest {  
        public static void main(String[] args) {  
            int busyTime = 10;  
            int idleTime = busyTime;  
            long startTime = 0; 
		
			while(true) {
				startTime = System.currentTimeMillis();
				while(System.currentTimeMillis() - startTime <= busyTime) {
					
				}
				try {
					Thread.sleep(10);
				}catch(Exception e) {
					e.printStackTrace();
				}
			}
      }  
    }  


由于在电脑中还存在后台程序的运行,所以存在有一定的波动性,但是大体上数据是正确的

怎样处理这样的问题呢   暂时我还没想到好的解决方案,C#中有性能监视器类可以实现这样的结果






  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值