为了账号安全,请及时绑定邮箱和手机立即绑定

萌新求教!swoole协程是如何判断阻塞的?如何判断非阻塞的?十分感谢

萌新求教!swoole协程是如何判断阻塞的?如何判断非阻塞的?十分感谢

一只甜甜圈 2019-08-21 13:21:52
如题。为什么在用户层调用PHP的sleep函数不会被swoole理解为阻塞?而是要调用swoole自己的co::sleep()?
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

因为sleep是PHP实现的函数,swoole无法检测到用户调用了这个函数,因此无法让当前执行的协程让出调度权。
这个跟golang不一样。golang在编译器上实现了函数调用时是否阻塞的来实现让出调度权。swoole本质上还是PHP的扩展,实际代码的解析和编译还是PHP内核来实现。
类似的还有文件读写,系统调用等,都需要自己去实现让出调度权的逻辑判断函数,否则也是阻塞worker进程的。
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 442 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信