在 PHP 中,睡眠和 usleep 在内部的行为是否不同



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

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

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

谢谢

它依赖于平台,但在 Linux 上,您可以使用以下简单脚本进行测试:

$start = microtime(true);
while(true){
        while(microtime(true) - $start < .9){}
}
//while(true){
//      usleep(900000);
//}

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

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

相关内容

  • 没有找到相关文章

最新更新