类别:Swoole / 日期:2019-12-11 / 浏览:227 / 评论:0

Swoole4为PHP言语供应了壮大的CSP协程编程形式,用户能够经由过程go函数建立一个协程,以到达并发实行的效果,如下面代码所示:
<?php //Co::sleep()是Swoole供应的API,并不会壅塞当前历程,只会壅塞协程触发协程切换。 go(function (){ Co::sleep(1); echo "a"; }); go(function (){ Co::sleep(2); echo "b"; }); echo "c"; //输出效果:cab //顺序总实行时间2秒
其实在Swoole4之前就完成了多协程编程形式,在协程建立、切换以及完毕的时刻,响应的操纵php栈即可(建立、切换以及接纳php栈)。
此时的协程完成没法圆满的支撑php语法,其根本原因在于没有保留c栈信息。(vm内部或许某些扩大供应的API是经由过程c函数完成的,挪用这些函数时假如发作协程切换,c栈该如何处置惩罚?)
Swoole4新增了c栈的治理,在协程建立、切换以及完毕的同时会伴随着c栈的建立、切换以及接纳。
Swoole4协程完成计划如下图所示:
个中:
·API层是供应给用户运用的协程相干函数,比方go()函数用于建立协程;Co::yield()使得当前协程让出CPU;Co::resume()可恢复某个协程实行;
·Swoole4协程须要同时治理c栈与php栈,Coroutine用于治理c栈,PHPCoroutine用于治理php栈;个中Coroutine(),yield(),resume()完成了c栈的建立以及换入换出;create_func(),on_yield(),on_resume()完成了php栈的建立以及换入换出;
·Swoole4在治理c栈时,用到了 boost.context库,make_fcontext()和jump_fcontext()函数均运用汇编言语编写,完成了c栈上下文的建立以及切换;
·Swoole4对boost.context进行了简朴封装,即Context层,Context(),SwapIn()以及SwapOut()
对应c栈的建立以及换入换出。
ki4网,有大批免费的Swoole入门教程,迎接人人进修!
以上就是swoole协程如何完成的细致内容,更多请关注ki4网别的相干文章!