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同时支持GIF、png、JPEG
Oct 09 PHP
第六节--访问属性和方法
Nov 16 PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
火车头discuz6.1 完美采集的php接口文件
Sep 13 PHP
php调用shell的方法
Nov 05 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
thinkPHP实现将excel导入到数据库中的方法
Apr 22 PHP
[原创]php实现子字符串位置相互对调互换的方法
Jun 02 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 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 启动报错如何解决
2014/01/17 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
Python命名空间详解
2014/08/18 Python
python实现计算资源图标crc值的方法
2014/10/05 Python
Python列表list数组array用法实例解析
2014/10/28 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
学生打架检讨书1000字
2014/01/16 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
实习护士自荐信
2014/06/21 职场文书
违章停车检讨书
2014/10/21 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
汶川大地震感悟
2015/08/10 职场文书
教育教学工作反思
2016/02/24 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python