Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP sleep()导致CPU使用率高_Php - Fatal编程技术网

PHP sleep()导致CPU使用率高

PHP sleep()导致CPU使用率高,php,Php,我运行的CLI脚本大部分都处于休眠状态。每隔10秒左右,脚本就会执行一些操作。问题是,该脚本在睡眠时占用了94%的CPU 我的设置方式是: while(1){ sleep(10); doStuff(); } 虽然这是预期的效果,但有一个明显的问题。在C++/Java中,我可以简单地设置一个计时器来消除循环问题。另外,我希望我不需要cron工作 有没有其他方法可以做到这一点 更新 显然,我的原始脚本(相当大)从未真正进入睡眠模式,因此while循环爆发并消耗CPU周期。对于任何

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

我的设置方式是:

while(1){
    sleep(10);
    doStuff();
}
虽然这是预期的效果,但有一个明显的问题。在C++/Java中,我可以简单地设置一个计时器来消除循环问题。另外,我希望我不需要cron工作

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


更新
显然,我的原始脚本(相当大)从未真正进入睡眠模式,因此while循环爆发并消耗CPU周期。对于任何有相同问题的人,请确保您的情况并非如此

过去,当我需要将PHP脚本设置为守护程序时,我使用了下面概述的PEAR模块:


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

我的脚本是这样设置的:

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。

从web服务器或CLI调用?修复了此问题。在实际的脚本中,它一直在循环,从未真正睡觉。我的不好。为什么评论这么低-不是几秒钟内睡觉-10秒钟是CPU时间很长的时间-你能解释为什么会发生这种情况吗?我无法重现这个问题(PHP5.3.10,Ubuntu服务器12.04 x64)…我能创造任何显著CPU使用率的唯一方法是去掉
sleep()
:请让我确保脚本实际上是睡眠的,而不是一直跳回while循环…@AdrianCornish,说得好,我认为睡眠是以毫秒为单位的。我不知道具体是什么问题。我将编辑我的答案,但保留该守护程序模块的链接,因为我发现它非常有用。它一直被设置为false,这意味着它一直返回while循环,而不是睡眠。修复后,CPU的占用率为0.0%:)