通过编程控制CPU利用率(r4笔记第69天)

作者: admin 分类: 公众号存档            0 次浏览 发布时间: 2015-03-09 23:35

公众号:杨建荣的学习笔记 · 作者:r4笔记第69天 · 发布:2015-03-09 23:35:42 · 原文链接

今天想起一个几年前学习过的程序,是在《编程之美》中提到的,是作为当时微软的面试题,写一个程序来控制CPU的利用率保持在50%,进一步延伸,能够写出程序来画出CPU利用率的正弦曲线。
这个题目看起来真是奇怪,能够达到这种程度,编程感觉就是出神入化了,但是仔细看看这个题目还是有一些依据可循,也有点小聪明的意思。
首先,对我们来说,能够直观感受CPU利用率就是通过任务管理器来得到的,我们可以大体的观察得到,基本上刷新CPU利用率的情况是按照秒来更新的,任何额外的操作都可能造成CPU的抖动,比如我打开另外一个程序,或者动动鼠标之类的。
所以在程序中,处理的时候CPU就开始忙起来了,如果想在一定的时间频度内给予CPU空闲时间,使得CPU利用率保持在50%,就代表
(CPU忙碌/(CPU忙碌+CPU空闲)=50%
从程序中来实现,CPU忙碌可以通过循环来实现,而空闲则可以通过sleep来实现。
关于这个实现,自己使用了如下的代码

public class CPUTest

  1. {

  2. public static void main(String[] args)

  3. {

  4. long startTime = 0;

  5. int busyTime = 10;

  6. int idleTime = 10;

  7. while (true)

  8. {

  9. startTime = System.currentTimeMillis();

  10. while (System.currentTimeMillis() – startTime <= busyTime)

  11. try

  12. {

  13. Thread.sleep(idleTime);

  14. }

  15. catch (InterruptedException e)

  16. {

  17. e.printStackTrace();

  18. }

  19. }

  20. }

  21. }

这个程序来本地的环境中测试,因为是多CPU的,所以得到的结果总是不太满意,没有达到预期,在单核的情况是没有问题的。
我灵机一动,可以通过Total CPU的使用率来说明。在任务管理器->性能 页面的右下角,有个资源监控的按钮,点进去就能看到一些详细的信息了。

得到了基本的要求,使得CPU利用率在50%左右,我们可以得到一个更为复杂的例子,就是画出正弦曲线来。
这个例子在本地测试基本得到了预期的效果。
使用的代码如下:

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注