当前位置:   LINUX > 正文

swoole协程怎样实现

swoole,协程,实现,php,go,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

Swoole4为PHP语言提供了强大的CSP协程编程模式,用户可以通过go函数创建一个协程,以达到并发执行的效果,如下面代码所示:

其实在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栈的创建以及换入换出。

,有大量免费的Swoole入门教程,欢迎大家学习!

以上就是swoole协程怎样实现的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/LINUX/detail/17498
推荐阅读
  • 如何解决《将Swift代码编译为Linux的本机可执行文件》经验,为你挑选了1个好方法。linux,swift,ubuntu,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,... [详细]

  • php长连接,奏是这么简单。php长连接,奏是这么简单说到长链接大家肯定不陌生,就是复用一个链接持续不断的进行数据交互,它不像那些一夜情似的服务,需要频繁php,php长连接,nginx,apache,服务器,websocket,go,li... [详细]

  • MAC本来就自带了php,但是很多扩展没有安装,所以选择了重新安装php并升级到最新版,下面说说安装步骤,希望对大家有所帮助mac,brew,php,git,ruby,https,go,apache,mysql,sql,mariadb,ba... [详细]

  • 如何解决《脊柱套到骆驼案》经验,为你挑选了1个好方法。bash,sed,linux,perl,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发... [详细]

  • 在整合swoolehttpserver和phalcon,server.php如下:{代码}浏览器访问没什么问题做ab测试就报错了{代码}错误信息:{代码}请教这是什么原因导致的,是onRequest那里写的不对吗?php,swoole,ph... [详细]

  • 比如说这么一个web后台页面,要有一个操作,对几万用户发送邮件或者发送推送~要怎么做才能调到php去而且不影响这个操作后的其他操作呢?因为php这种请求是串行处理的,调用一个函数方法等只有跑完下来才能退出,如果php,多线程,并行,apac... [详细]

  • 如何解决《可以在AWSLambda函数中编写bash脚本》经验,为你挑选了4个好方法。bash,amazon-web-services,aws-lambda,python,git,json,linux,https,DevBox,在线流程图,... [详细]

  • 如何解决《Shell脚本错误:[:0:一元运算符预期》经验,为你挑选了1个好方法。linux,bash,shell,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工... [详细]

  • PHPer去游戏运营公司可以做什么?是否有挑战性?能否提升技术能力?是否值得去?谢谢!职业规划,职业生涯,php,swoole,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳... [详细]

  • 这篇文章主要介绍了100多行PHP代码实现socks5代理服务器,需要的朋友可以参考下php,socks5,服务器,swoole,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间... [详细]

  • php本身是没有异步的,但我们经常会需要处理一些耗时操作,如微信公号推送给所有用户。试过很多方法都没有做到,每一条推送一个网络请求,curl每次好像最少一秒,请求次数多肯定不行。fscokopenpostjson数据没php,微信,json... [详细]

  • 无法使用swoole的解决办法:首先使用命令“php-i|grepini”找到配置文件;然后查看ini配置文件地址;接着检查“extensionswoole.so”是否配置;最后重新配置swoole即可。swoole,php,DevBox,... [详细]

  • 基于框架之上开发应用,无论是Swoole还是Java对于使用者来说难度是一致的。但是直接基于Swoole开发很容易犯错,这需要开发者具备更高的素质。swoole,php,go,程序员,服务器,架构设计,DevBox,在线流程图,编程,编程问... [详细]

  • 如何解决《排序大文件(10G)》经验,为你挑选了1个好方法。linux,sorting,large-files,bigdata,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳... [详细]

  • 这篇文章主要介绍了docker搭建lnmp环境的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧docker,搭建lnmp,php,mariadb,nginx,r... [详细]

  • 如果用一句话概括RPC就是:远程调用框架(RemoteProcedureCall)通常我们调用一个php中的方法,比如这样一个函数方法:localAdd(10,20),localAdd方法的具体实现要么是用户自己定义的。php,rpc,服务... [详细]

  • Socket通信中2进制数据读写类,PHP模仿java的DataInputStream和DataOutputStreamSocket通信中2进制数据读写类,PHP模仿java的DataInputStream和DataOutputStream... [详细]

  • 如何解决《将IP地址传递给cloud-init元数据》经验,为你挑选了1个好方法。linux,bash,kvm,openstack,cloud-init,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,... [详细]

  • php使用swoole实现一个简单的多人在线聊天群发,swoole在线聊天。php使用swoole实现一个简单的多人在线聊天群发,swoole在线聊天聊天逻辑的好多细节没有实现,只实现群发。php代码:$servnewswoole_webs... [详细]

  • 如何解决《在docker中重定向命令输出》经验,为你挑选了3个好方法。linux,bash,logging,output,docker,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,uni... [详细]

相关标签
  

闽ICP备14008679号