swoole协程入门 - Go语言中文社区

swoole协程入门


看了韩天峰PHP 协程:Go + Chan + Defer的文章,觉得swoole大大降低了协程的开发门槛,同时提供了php yield原生协程不具备的功能,尝试着写一些简单的例子。

前言:协程是什么?
协程是协作式任务(用户来决定控制流),相对的是抢占式任务(例如cpu来调度资源)。简单点说,协程的精髓就是控制流的让出与恢复。

环境:
ubuntu18.04.1 LTS
php7.3.0
swoole4.2.10

看例子:simple_co.php

// simple co
function t1() {
    Co::sleep(0.05);
    echo __METHOD__.PHP_EOL;
}

function t2() {
    Co::sleep(0.05);
    echo __METHOD__.PHP_EOL;
}

function t3() {
    Co::sleep(0.05);
    echo __METHOD__.PHP_EOL;
}


go("t1");
go("t2");
go("t3");
# 运行过程:
# t1执行,遇到Co::sleep,让出控制流,t1暂停
# t2执行,类似t1情况
# t3执行,类似t1情况
# 没有其他程序了,等待3个协程的执行
# 协程上t1的sleep先结束,恢复执行t1
# t2、t3的恢复执行类似(实际上,恢复的执行顺序不一定是t1/t2/t3)
# 然后整个程序结束

$ time php simple_co.php  # 执行时间在0.07s左右

这个简单的例子,定义了三个任务(t1/t2/t3),通过短名称go来运行三个任务。

结束
这个例子,主要来描述控制流的让出和恢复执行,这也是协程的精髓。
当然,程序的实现依赖于swoole的封装,感谢swoole!

版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/ccbe6a883160
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-12 13:05:27
  • 阅读 ( 1271 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢