本书未发布

sleep/usleep 的影响

为了更好的阅读体验,将文档从 Swoole 官方文档 搬运过来。内容比较多,我会慢慢搬运过来,也欢迎大家以提交改进的方式一起帮助我。

在异步 IO 的程序中,不得使用 sleep/usleep/time_sleep_until/time_nanosleep。(下文中使用 sleep 泛指所有睡眠函数)

sleep函数会使进程陷入睡眠阻塞
直到指定的时间后操作系统才会重新唤醒当前的进程
sleep过程中,只有信号可以打断
由于Swoole的信号处理是基于signalfd实现的,所以即使发送信号也无法中断sleep
Swoole提供的swoole_event_addswoole_timer_tickswoole_timer_afterswoole_process::signal、异步swoole_client 在进程sleep后会停止工作。swoole_server也无法再处理新的请求。

实例程序

$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 函数,server100秒内无法再收到任何客户端请求。

本文章首发在 LearnKu.com 网站上。
上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~