Swoole的“协程调度”如何理解?
协程调度
决定到底让 CPU
执行哪个协程的代码决断过程就是协程调度
,调度的策略是什么?
首先,在执行某个协程代码的过程中发现这行代码遇到了 Co::sleep()
或者产生了网络 IO
,例如 MySQL->query()
,这肯定是一个耗时的过程,Swoole
就会把这个 Mysql
连接的 Fd
放到 EventLoop
中。
- 然后让出这个协程的
CPU
给其他协程使用:即yield
(挂起) - 等待
MySQL
数据返回后就继续执行这个协程:即resume
(恢复)
其次,如果协程的代码有 CPU
密集型代码,可以开启 enable_preemptive_scheduler
,Swoole
会强行让这个协程让出 CPU
。
摘自:https://wiki.swoole.com/#/coroutine?id=协程调度