swoole协程的示例分析

  介绍

小编给大家分享一下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协程的示例分析