我有一个套接字服务器侦听传入数据的连接,并在输入暂停期间写入传出数据。 由于这是在一个循环中,我正在进行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给了我自己测试的想法。