gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Swoole 5将移除自动添加Event::wait()特性详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

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

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

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

错误实例 。

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

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

?
1
2
3
4
5
6
7
8
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()
?
1
2
3
4
5
6
$scheduler = new Coroutine\Scheduler;
$scheduler ->add( function () {
  Co::sleep(1);
  echo "Done.\n" ;
});
$scheduler ->start();

推荐使用 。

或者:

?
1
2
3
4
5
go( function () {
  Co::sleep(1);
  echo "done\n" ;
});
Swoole\Event::wait();

不推荐使用 。

总结 。

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

原文链接:https://segmentfault.com/a/1190000019711014 。

最后此篇关于Swoole 5将移除自动添加Event::wait()特性详解的文章就讲到这里了,如果你想了解更多关于Swoole 5将移除自动添加Event::wait()特性详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com