PHP sleep()导致高CPU使用率

时间:2012-09-12 02:38:09

标签: php

我正在运行一个主要睡眠的CLI脚本。脚本每10秒左右执行一次。问题是,脚本在睡眠时占用了94%的CPU。

我设置的方式是:

while(1){
    sleep(10);
    doStuff();
}

虽然这是按预期工作的,但是有一个明显的问题。在C ++ / Java中,我可以简单地设置一个可以消除循环问题的计时器。另外,我希望我不需要cron工作。

有没有其他方法可以做到这一点?


更新

显然我的原始脚本(相当大)从未实际上进入睡眠模式,因此while循环运行了单元化并烧毁了CPU周期。对于有同样问题的人,请确保不是您的情况!

2 个答案:

答案 0 :(得分:1)

过去,当我需要将PHP脚本作为守护进程时,我使用了此处概述的PEAR模块:http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/

如果您不想使用PEAR模块,可以检查其源代码并执行类似操作。

答案 1 :(得分:1)

我的脚本设置如下:

define('THREAD_SLEEP', 10); // Sleep time
$sleep = false; // Skips the first sleep

while(1){
    if($sleep){
        sleep(THREAD_SLEEP);
    }

    $sleep = true; // By default, the script enters sleep mode each loop.

    if(doSomethingAndHaveMoreToDo()){
        $sleep = false; // If more stuff to do, remove sleep and keep doing it.
    }
}

问题是,脚本将$sleep设置为false,这意味着它从未进入睡眠模式并且耗尽了近100%的CPU。