协程调度

决定到底让 CPU 执行哪个协程的代码决断过程就是协程调度,调度的策略是什么?

首先,在执行某个协程代码的过程中发现这行代码遇到了 Co::sleep() 或者产生了网络 IO,例如 MySQL->query(),这肯定是一个耗时的过程,Swoole 就会把这个 Mysql 连接的 Fd 放到 EventLoop 中。

  • 然后让出这个协程的 CPU 给其他协程使用:即 yield(挂起)
  • 等待 MySQL 数据返回后就继续执行这个协程:即 resume(恢复)

其次,如果协程的代码有 CPU 密集型代码,可以开启 enable_preemptive_schedulerSwoole 会强行让这个协程让出 CPU

摘自:https://wiki.swoole.com/#/coroutine?id=协程调度

标签: 协程调度

添加新评论