swoole不能用sleep的原因是什么

这篇文章主要介绍“swoole不能用sleep的原因是什么”,在日常操作中,相信很多人在swoole不能用sleep的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”swoole不能用sleep的原因是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于做网站、网站设计、运城网络推广、小程序定制开发、运城网络营销、运城企业策划、运城品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供运城建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

因为在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不能用sleep的原因是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


当前文章:swoole不能用sleep的原因是什么
网页地址:http://scyanting.com/article/jgpoji.html