🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# sleep/usleep的影响 在异步IO的程序中,__不得使用sleep/usleep/time_sleep_until/time_nanosleep__。(下文中使用`sleep`泛指所有睡眠函数) * `sleep`函数会使进程陷入睡眠阻塞 * 直到指定的时间后操作系统才会重新唤醒当前的进程 * `sleep`过程中,只有信号可以打断 * 由于`Swoole`的信号处理是基于`signalfd`实现的,所以即使发送信号也无法中断`sleep` `Swoole`提供的`swoole_event_add`、`swoole_timer_tick`、`swoole_timer_after`、`swoole_process::signal`、`异步swoole_client` 在进程sleep后会停止工作。`swoole_server`也无法再处理新的请求。 实例程序 ---- ```php $serv = new swoole_server("127.0.0.1", 9501); $serv->set(['worker_num' => 1]); $serv->on('receive', function ($serv, $fd, $from_id, $data) { sleep(100); $serv->send($fd, 'Swoole: '.$data); }); $serv->start(); ``` `onReceive`事件中执行了`sleep`函数,server在100秒内无法再收到任何客户端请求。