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和XSS跨站攻击的防范
Apr 17 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
phpmyadmin MySQL 加密配置方法
Jul 05 PHP
PHP 网络开发详解之远程文件包含漏洞
Apr 25 PHP
eAccelerator的安装与使用详解
Jun 13 PHP
php通过sort()函数给数组排序的方法
Mar 18 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
Sep 30 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
PHP设置进度条的方法
2015/07/08 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
PHP反射实际应用示例
2019/04/03 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
模拟select的代码
2011/10/19 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
js实现无缝轮播图
2020/03/09 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
python进程管理工具supervisor使用实例
2014/09/17 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
软件测试企业面试试卷
2016/07/13 面试题
优秀团员个人的自我评价
2013/10/02 职场文书
学生退学证明
2015/06/23 职场文书