6

我正在运行一个大部分时间都在休眠的 CLI 脚本。每隔 10 秒左右,脚本就会执行一些操作。问题是,脚本在睡眠时处于 94% 的 CPU 使用率。

我设置的方式是:

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

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

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


更新

显然我的原始脚本(相当大)从未真正进入睡眠模式,因此 while 循环运行时中断并烧毁了 CPU 周期。对于遇到相同问题的任何人,请确保您不是这种情况!

4

2 回答 2

3

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

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

于 2012-09-12T02:42:09.737 回答
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.
    }
}

问题是,脚本一直设置$sleepfalse,这意味着它永远不会进入睡眠模式并且几乎消耗了 100% 的 CPU。

于 2012-09-12T03:06:07.817 回答