《编程之美》“让CPU占用率听你指挥”学习笔记

37 篇文章 0 订阅
18 篇文章 1 订阅

CPU占用率可理解为忙的时间与总的时间的比。若此,自然有第一种解法:空循环与Sleep。具体的方法和代码在《编程之美》的原著中有详述。须注意的是,测出CPU一秒钟能执行的空循环次数(假设能执行C次空循环)后,不能简单地空循环C/2,然后休息半秒钟。这样得出的曲线虽然大致上是所要求的开头,但是抖动非常厉害。解决方法是什么呢?

解决方法就是使用更小的时间片。如果原来一秒钟可以做C次空循环,那么可以把它们同进降低两个数量级,先空循环C/100次,然后Sleep10毫秒。这样得出的曲线就非常平滑了。这是对第一种方法的改进:使用更细的粒度实现更精准的模拟。

前两种方法都需要计算出电脑CPU一秒钟内能做多少次空循环。如果换一台电脑就必须重新计算这些数据。其实我们也能感觉得到,既然占用率是一个比值,比值总是相对的。如果我们要求CPU占用率50%,那么在一段时间里让CPU忙一半时间闲一半时间就可以了,这在任何地方都是对的。闲一段时间直接Sleep就可以,那么如何忙一段固定的时间呢?还是用空循环?如果在MSDN上查过clock这个函数,会发现MSDN上给出了一段示例代码如下:

  

这不正是使用空循环使CPU忙固定的时间吗?于是新的方法出来了,这种新的方法不需要具体的CPU参数,更加简单、灵巧、通用。下面是自己写的一个完整的让CPU占用率呈现正弦曲线的程序:

  

以上三种解法,解法三不但简单而且通用,其思想更值得学习。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值