为什么现在swoole使用隐式协程?而不是yield方式的协程?

发布于 2022-09-06 23:51:30 字数 243 浏览 12 评论 0

协程和多线程相比,一个主要的优势就在于主动让出CPU,而不是CPU抢占。
这样,很多为了避免抢占的锁,就可以避免了。

但是swoole选用了隐式的协程,这样对于上层代码来讲,CPU还是被其他协程抢占的(而不是通过yield等方式让出的),那就可能导致很多抢占导致的问题。
比如mysql和redis查询到一半,mysql client的状态被其他协程修改了,等等。

不知道为何swoole采用了隐式的协程,以及这种做法会有坑吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

余生共白头 2022-09-13 23:51:30

我觉得就是让协程用起来更加方便了,而使用 yield 实现起来是相当晦涩的。

yield 的实现参见鸟哥博客: 在PHP中使用协程实现多任务调度

淡淡の花香 2022-09-13 23:51:30

如果你自己管理协程,手动yield,那么你需要自己去判断事件是否就绪。此时,Swoole就需要暴露更多C底层的API来给你使用。

而且你自己管理yield协程,如果你忘记了resume,那么很容易造成内存泄漏。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文