while(true)的思考

2020/06/01 posted in  脚本
Tags:  #shell #test #php

其实我们更多时候使用while(1)作为守护进程,帮我们处理更多的事情

测试while(1)

使用php为例

$i = 1;
$time = time();
while(1)
{
    if($time != time())
    {
        echo 'ok|'.$i."|".time()."\n";
        $time = time();
        echo "end\n";
        $i = 0;
    // break;
    }
    $i++;
}


简单的操作的函数,每秒其实可以运算千万次的。
这时候我们查看一下top命令

实际cpu一直维持在98%左右。
我们去掉相关代码

while(1)
{
}

只保留while(true),查看结果得知,cpu还是很高的状态。这是因为while(1)一直在进行着运算。
接着我们在while(1)里面增加sleep(1)函数,让他休息一下再执行下面的逻辑

可以看到cpu已经降下来了,因为有sleep停顿的操作,使代码不用一直不停地执行,所以cpu降了下来。

总结

我们自己写守护进程的时候,要考虑一下放在进程里,程序里消耗有多少,甚至new一个mysql对象一直保持的状态下有没问题,都是要考虑的。