举个例子:有三个并发请求,启动三个协程
协程1,2,3 1: ob_start() 1 iowait 如 redis mysql 查询 —> 等待让出执行权 2: ob_start() 2 iowait 如 redis mysql 查询 —> 等待让出执行权 3: ob_start() 3 iowait 如 redis mysql 查询 —> 等待让出执行权 1 io finish 1: echo 1; 1 io wait —>让出执行权 2 io finish 2: echo 1; 2 io wait —>让出执行权 3 io finish 3: echo 1; 3 io wait —>让出执行权 1: $a=ob_get_contents() 2: $a=ob_get_contents() 3: $a=ob_get_contents() 1:retuen $a; 2:retuen $a; 3:retuen $a;
结果并不都是1,ob缓冲区已被污染。
swoole跟传统的fpm生命周期完全不一样,就导致fpm扩展跟swoole无法兼容,我们也不可能让全世界都开发swoole兼容的sdk,因为swoole只在中国有所发展,这就导致使用swoole的风险及成本加大。
来自anson博客
2021-01-31 13:58:02