swoole协程的特点是什么,如何创建协程
Admin 2022-07-21 群英技术资讯 475 次浏览
本文前提,linux上已安装了swoole。目前的最新版是 4.5.9(2020-12-17)
构造一个需求,一下创建5个协程,每个协程休眠1到3秒之间的随机数,然后打印出睡眠时间,希望所有的程序结束时,整个耗时是最长3秒。
1.php
foreach (range(1, 5) as $v) { go(function () { $sleep_time = random_int(1, 3); sleep($sleep_time); echo "睡眠了" . $sleep_time . "秒\n"; });}
用php 1.php执行,程序能执行,但是感觉不像是协程,而是同步执行的。整个执行下来远远超过3秒。原来这里有个小bug,应该使用 co:sleep, 这样才会在本协程内睡眠,而不影响整个程序。
2.php
foreach (range(1, 5) as $v) { go(function () { $sleep_time = random_int(1, 3); co::sleep($sleep_time); echo "睡眠了" . $sleep_time . "秒\n"; });}
结果如下:
睡眠了1秒 睡眠了2秒 睡眠了2秒 睡眠了3秒 睡眠了3秒
总之一定是睡眠少的协程先退出,而且,睡眠了同样时间的协程是同时打印出字符的。并且程序结束时的总共耗时就是3秒,说明并发成功。
现在希望5个协程结束后,能打印出hello world!
3.php
foreach (range(1, 5) as $v) { go(function () { $sleep_time = random_int(1, 3); co::sleep($sleep_time); $a = random_int(1, 1000); echo "睡眠了" . $sleep_time . "秒\n"; });}echo "hello world!\n";
结果又出问题了,hello world 总是最先打印出来。
所以,这里需要使用协程容器这个东东。
4.php
Co\run(function () { foreach (range(1, 5) as $v) { go(function () { $sleep_time = random_int(1, 3); co::sleep($sleep_time); echo "睡眠了" . $sleep_time . "秒\n"; }); }});echo "hello world!\n";
结果如下:
睡眠了1秒 睡眠了2秒 睡眠了3秒 睡眠了3秒 睡眠了3秒 hello world!
这次就能打印出正确结果了,perfect!
swoole的协程还是有点意思的~
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本文算术练习的问题是“编写一个PHP程序来计算两个给定整数值的总和,如果两个值相同,则返回其总和的三倍”。下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
本文给大家分享的时候Laravel下怎样实现返回状态拦截代码的操作,可拦截系统的返回的状态自己在单独处理,小编觉得比较实用,废话不多说,我们直接来看代码,需要的朋友可以参考。
对于反射,很多人可能会想到膝跳反射。其实在编程语言中也有反射,这篇文章就给大家介绍简单的介绍一下PHP的反射机制,带大家回顾一下反射的基础知识。
SVN是Subversion的简称,是一个开放源代码的版本控制系统。说得简单一点SVN就是用于多个人共同开发同一个项目,达到共用资源、记录项目版本的目的。PhpStorm内置了svn支持,因此无需单独下载svn。
首先我详细说下这四个引入函数include()与require()的功能相同唯一不同:require()不管是否被执行,只要存在,php在执行前都会预引入,include()则是执行到该语句时才进行引入 include_once() 与require_once() 都是检测文件是否被引入,被引入则不会引入唯一不同: require_once()为无条件包含,顾名思义也就是引入后如遇
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008