新手发问: 如何解决CUP使用率高的问题

新手发问: 如何解决CUP使用率高的问题

在要使用长时间循环的时候, CPU使用率一直都是100%, 本人用的是AMD Athlon 3000+ 的CPU 1GB内存. 测试如下Script.   CPU 就到100%了, 电脑变得很慢, 请问有没有方法解决.
-------------------------
#!/usr/bin/perl -w
while (2>1) {
$a=1;
}
-------------------------
#!/usr/bin/perl -w

while (2>1) {
$a=1;
sleep 5;
}
#!/usr/bin/perl -w

while (1) {
$a=1;
}
试试,


QUOTE:
原帖由 ynchnluiti 于 2008-10-25 18:18 发表
#!/usr/bin/perl -w

while (2>1) {
$a=1;
sleep 5;
}

楼主用你的方法,估计程序得运行到公元 99999年。


QUOTE:
原帖由 machine 于 2008-10-25 18:39 发表
#!/usr/bin/perl -w

while (1) {
$a=1;
}
试试,

你试过没


QUOTE:
原帖由 redspider 于 2008-10-28 12:17 发表

楼主用你的方法,估计程序得运行到公元 99999年。

我只管cpu不显示100%
这是一个死循环,程序一直在那儿运行,CPU占用率当然高了,呵呵。
楼主要明白cpu 100%的原理是什么。
我们的操作系统在给各个进程分配CPU时,并不是均等分配,让各个进程都有同等机会运行,
而是谁有需求就给谁(这点是我的个人理解,不一定对,详细内容可以参考操作系统教材)

所以当你的系统中运行while(2>1)这种死循环时,
如果没有运行其他程序(即其他程序不需要CPU),操作系统就会把CPU全部分配这个死循环。
所以看起来就是100%。

如果你同时启动两个死循环进程,那么基本上就是各50%。

所以说这个100%也是相对的。

当然,这种程序会积极地“抢占”其他进程的CPU,会拖慢其他程序的运行速度。

而楼上说的sleep的办法,就是让程序执行一段之后,通过sleep命令主动放弃CPU控制权。
这样CPU的使用率就会降下来。
而其他的程序也可以趁着sleep的这段时间,轻松地获得CPU控制权而继续执行。
所以,加了sleep之后,程序对其他程序的影响就小多了。

当然sleep 5似乎太长了些,时间是以秒为单位的。
如果需要更精确的sleep,可以 use Time::HiRes qw(usleep)。

可以这样做:
1. 计算出一次循环需要的时间。
2. usleep这么长时间。

这样程序就是忙一段、闲一段,忙和闲的时间相等,所以CPU使用率为50%。