0%

Swoole协程如何处理CPU密集型应用

前言

存档,待完善..

正文

想要做抢占式调度,对于PHP来说,有两个途径

  1. 当前执行协程在一定条件下主动让出
  2. 额外开线程,监控当前执行协程时间,超过设定值则让出当前执行协程

当前执行协程在一定条件下主动让出

Swoole版本:4.3.x

PHP是单线程运行的,可以参考这篇文章协程 CPU 密集场景调度实现,在脚本开始处注入逻辑declare(tick=N),配合Swoole协程。逻辑是每次触发tick handler的时候,判断当前协程相对最近一次调度时间是否大于协程最大执行时间(max_exec_msec),这样就可以将当前超出执行时间后的协程主动让出。

额外开线程,负责检查当前执行协程的执行时间

Swoole版本:4.4.x

参考这篇文章Swoole 4.4 协程抢占式调度器详解,利用PHP-7.1.0引入的VM interrupt机制,默认每隔5ms检查一下当前协程是否达到最大执行时间,默认为10ms,如果超过,则让出当前协程,达到被其他协程抢占的目的。

不为赚钱,只为交个朋友!干杯~

Welcome to my other publishing channels