我正在运行一个主要睡眠的CLI脚本。脚本每10秒左右执行一次。问题是,脚本在睡眠时占用了94%的CPU。
我设置的方式是:
while(1){
sleep(10);
doStuff();
}
虽然这是按预期工作的,但是有一个明显的问题。在C ++ / Java中,我可以简单地设置一个可以消除循环问题的计时器。另外,我希望我不需要cron工作。
有没有其他方法可以做到这一点?
显然我的原始脚本(相当大)从未实际上进入睡眠模式,因此while循环运行了单元化并烧毁了CPU周期。对于有同样问题的人,请确保不是您的情况!
答案 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。