为什么现在swoole使用隐式协程?而不是yield方式的协程?
协程和多线程相比,一个主要的优势就在于主动让出CPU,而不是CPU抢占。
这样,很多为了避免抢占的锁,就可以避免了。
但是swoole选用了隐式的协程,这样对于上层代码来讲,CPU还是被其他协程抢占的(而不是通过yield等方式让出的),那就可能导致很多抢占导致的问题。
比如mysql和redis查询到一半,mysql client的状态被其他协程修改了,等等。
不知道为何swoole采用了隐式的协程,以及这种做法会有坑吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我觉得就是让协程用起来更加方便了,而使用
yield
实现起来是相当晦涩的。yield
的实现参见鸟哥博客: 在PHP中使用协程实现多任务调度如果你自己管理协程,手动
yield
,那么你需要自己去判断事件是否就绪。此时,Swoole
就需要暴露更多C
底层的API
来给你使用。而且你自己管理
yield
协程,如果你忘记了resume
,那么很容易造成内存泄漏。