在PHP中,睡眠和睡眠行为在内部表现不同吗?

时间:2017-03-24 16:17:49

标签: php cpu sleep usleep

我有一个套接字服务器在输入暂停期间侦听传入数据的连接并写入传出数据。由于这是一个循环,我正在进行sleep调用,以便允许其他进程有一些CPU时间,而我的进程不会立即期望输入。

我知道sleep会这样做,但usleep是否也会将执行返回给操作系统?我很怀疑,因为我知道,传统上,sleep系统调用仅接受几秒钟,十年前我读过关于C编程的一本非常古老的书说过,睡眠"对于较短的间隔涉及黑客,如制作无限循环以基本上模拟sleep调用,但不会将CPU时间放弃到其他进程。 (这本书可能错了,或者可能不再准确,我只是告诉你它说的是什么。)

我正在使用Linux,PHP版本5.6和7.1

谢谢

1 个答案:

答案 0 :(得分:0)

它依赖于平台,但在Linux上,您可以使用这个简单的脚本来测试:

$start = microtime(true);

while(true){
        while(microtime(true) - $start < .9){}
}

//while(true){
//      usleep(900000);
//}

第一次用php test.php & top -d 0.1运行它来观察虚假sleep的样子,在完成检查top之后杀死生成的php进程,注释掉第一个while循环并取消注释第二个,重新运行脚本并记下CPU使用情况。

感谢Halcyon给我自己测试的想法。