介绍
小编给大家分享一下swoole协程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
linux上已安装了swoole。目前的最新版是4.5.9 (2020-12-17)
构造一个需求,一下创建5个协程,每个协程休眠1到3秒之间的随机数,然后打印出睡眠时间,希望所有的程序结束时,整个耗时是最长3秒。
1。php
foreach (范围(1),5),as 美元v), { ,,,(function (), { ,,,,,,,sleep_time 美元;=,random_int (1,, 3); ,,,,,,,睡眠(sleep_time美元); ,,,,,,,echo “睡眠了“,只sleep_time 美元;只“秒\ n"; ,,,});}
用php 1。php执行,程序能执行,但是感觉不像是协程,而是同步执行的。整个执行下来远远超过3秒。原来这里有个小错误,应该使用有限公司:睡眠,这样才会在本协程内睡眠,而不影响整个程序。
2。php
foreach (范围(1),5),as 美元v), { ,,,(function (), { ,,,,,,,sleep_time 美元;=,random_int (1,, 3); ,,,,,,,有限公司::睡眠(sleep_time美元); ,,,,,,,echo “睡眠了“,只sleep_time 美元;只“秒\ n"; ,,,});}
结果如下:
睡眠了1秒 睡眠了2秒 睡眠了2秒 睡眠了3秒 以前睡眠了3秒>总之一定是睡眠少的协程先退出,而且,睡眠了同样时间的协程是同时打印出字符的。并且程序结束时的总共耗时就是3秒,说明并发成功。
现在希望5个协程结束后,能打印出hello world !
3。php
foreach (范围(1),5),as 美元v), { ,,,(function (), { ,,,,,,,sleep_time 美元;=,random_int (1,, 3); ,,,,,,,有限公司::睡眠(sleep_time美元); ,,,,,,,a 美元;=,random_int (1, 1000); ,,,,,,,echo “睡眠了“,只sleep_time 美元;只“秒\ n"; ,,,});}echo “hello 世界! \ n";结果又出问题了,hello world总是最先打印出来。
所以,这里需要使用协程容器这个东东。4。php
有限公司\运行(function (), { ,,,foreach (范围(1),5),as 美元v), { ,,,,,,,(function (),, { ,,,,,,,,,,,sleep_time 美元;=,random_int (1,, 3); ,,,,,,,,,,,有限公司::睡眠(sleep_time美元); ,,,,,,,,,,,echo “睡眠了“,只sleep_time 美元;只“秒\ n"; ,,,,,,,}); ,,,}});echo “hello 世界! \ n";结果如下:
睡眠了1秒 睡眠了2秒 睡眠了3秒 睡眠了3秒 睡眠了3秒 hello 世界!这次就能打印出正确结果了,完美!
以上是“swoole协程的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
swoole协程的示例分析