为什么swoole不能用sleep

广告:宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取~~~

为什么swoole不能用sleep

因为在swoole中,使用sleep函数会使进程陷入睡眠阻塞;sleep过程中只有信号可以打断,由于swoole的信号是基于signalfd实现的,所以即使发送信号也无法中断sleep,只有到指定的时间后操作系统才会重新唤醒当前的进程。

本教程操作环境:Windows10系统、Swoole4版、DELL G3电脑

为什么swoole不能用sleep

在异步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也无法再处理新的请求。

实例程序

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

推荐学习: swoole教程

以上就是为什么swoole不能用sleep的详细内容,更多请关注9543建站博客其它相关文章!

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:php移除二维数组的最后一项
下一篇:实例记录:ThinkPhp5.1使用Topsdk-Topapi问题

发表评论

关闭广告
关闭广告