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正则走开
Mar 15 PHP
php array_merge下进行数组合并的代码
Jul 22 PHP
PHP之短标签开启设置
Jun 17 PHP
PHP字符串的连接的简单实例
Dec 30 PHP
PHP中的日期加减方法示例
Aug 21 PHP
PHP也能干大事 随机函数
Apr 14 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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处理json格式数据经典案例总结
2016/05/19 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Python字符串格式化
2015/06/15 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
秘书行业自我鉴定范文
2013/12/30 职场文书
自我鉴定 电子商务专业
2014/01/30 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
党员自我对照检查材料
2014/08/19 职场文书
教师先进个人材料
2014/12/17 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
交通安全温馨提示语
2015/07/14 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
2022年显卡天梯图(6月更新)
2022/06/17 数码科技