swoole如何通过go函数实现协程,代码是什么
Admin 2022-08-30 群英技术资讯 1448 次浏览
今天就跟大家聊聊有关“swoole如何通过go函数实现协程,代码是什么”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“swoole如何通过go函数实现协程,代码是什么”文章能对大家有帮助。
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栈的创建以及换入换出。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要给大家介绍了关于如何利用PHP实现多张上传图片功能的,文中通过示例代码介绍的非常详细,对大家的学习PHP具有一定的帮助,需要的可以参考一下
一些朋友遇到php安装扩展模块后,重启不生效的情况,这是什么原因呢?要怎么样解决?下面有php扩展安装步骤以及解决php扩展安装不生效的办法,供大家参考。
Swoole是PHP的一个扩展,可以通过PHP扩展的方式进行安装和启用。通过php -i | grep php.ini定位php.ini文件所在位置,进行配置extension=swoole.so保存退出。
这篇文章给大家分享的是关于PHP枚举类型的管理的内容,下面介绍了几种PHP枚举类型的常见管理方式以及示例,小编觉得是比较实用的,因此分享给大家,下面我们就一起来了解一下吧。
swoole保持不掉线的方法:Swoole扩展可以通过心跳机制来保持不掉线,这个机制保证服务器和客户端之间连接的有效性。Swoole扩展本身内置了这种机制,开发者只需要配置一个参数即可启用。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008