Swoole 5将移除自动添加Event::wait()特性详解


Posted in PHP onJuly 10, 2019

前言

在之前的版本中,编写Cli命令行脚本中使用异步或协程功能时,Swoole会自动在脚本末尾检测是否有Event::wait()调用,如果没有,底层会自动调用register_shutdown_function在脚本结束时调用Event::wait(),进入事件循环。

这个特性为底层带来了非常多的麻烦,我们不得不做了大量编码工作,以解决带来的问题。即便如此,仍然存在大量潜在的风险,如某些PHP版本下内存泄露,某些特殊用法导致core dump等。在最新的Swoole 5版本中,我们准备抛弃这个历史包袱。不再自动添加 Event::wait() 到PHP的shutdown function列表。

Server、Process、Process\Pool相关程序请忽略此更新

错误实例

go(function () {
 Co::sleep(1);
 echo "done\n";
});

此代码中没有在脚本末尾添加Swoole\Event::wait(),底层会自动注册到shutdown function列表中。相当于:

register_shutdown_function(function () {
 Swoole\Event::wait();
});

go(function () {
 Co::sleep(1);
 echo "done\n";
});

在shutdown阶段处理程序逻辑会带来很多额外的维护性难题。

正确实例

在Swoole 4.4或Swoole 5版本中,建议:

  • 使用Coroutine\Scheduler作为程序的入口
  • 或者在程序末尾手工添加Event::wait()
$scheduler = new Coroutine\Scheduler;
$scheduler->add(function () {
 Co::sleep(1);
 echo "Done.\n";
});
$scheduler->start();

推荐使用

或者:

go(function () {
 Co::sleep(1);
 echo "done\n";
});
Swoole\Event::wait();

不推荐使用

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
探讨:web上存漏洞及原理分析、防范方法
Jun 29 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
php计算数组相同值出现次数的代码(array_count_values)
Jan 20 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
PHP的几个常用加密函数
Feb 03 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
Laravel如何创建服务器提供者实例代码
Apr 15 PHP
php精度计算的问题解析
Jun 21 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 #PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 #PHP
PHP+redis实现微博的推模型案例分析
Jul 10 #PHP
实例分析10个PHP常见安全问题
Jul 09 #PHP
PHP批斗大会之缺失的异常详解
Jul 09 #PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
Jul 09 #PHP
PHP+Redis开发的书签案例实战详解
Jul 09 #PHP
You might like
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
网页常用特效代码整理
2006/06/23 Javascript
asp 取文本框名称代码
2008/12/02 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
Vue+Vux项目实践完整代码
2017/11/30 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
Python+Wordpress制作小说站
2017/04/14 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
numpy基础教程之np.linalg
2019/02/12 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
python实现的Iou与Giou代码
2020/01/18 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
英国领先的电视购物零售商:Ideal World
2019/03/18 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
应用心理学个人求职信范文
2013/12/11 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
国培教师自我鉴定
2014/02/12 职场文书
百日安全活动总结
2014/05/04 职场文书
党员志愿者活动总结
2014/06/26 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python