3

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

我知道sleep这样做,但是否usleep也将执行返回给操作系统?我很怀疑,因为我知道,传统上,sleep系统调用只接受秒,而且我十年前读过的一本关于 C 编程的非常古老的书说,要“睡眠”更短的时间间隔涉及黑客,比如制作一个无限循环来基本上模拟sleep调用但不将 CPU 时间让给其他进程。(这本书可能是错的,或者可能不再准确,我只是告诉你它所说的。)

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

谢谢你

4

1 回答 1

0

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

$start = microtime(true);

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

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

php test.php & top -d 0.1第一次运行它以观察 false 的sleep样子,在完成检查后终止生成的 php 进程top,注释掉第一个while循环并取消注释第二个循环,重新运行脚本并注意 CPU 使用率。

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

于 2017-03-24T16:57:02.593 回答