美文网首页
swoole协程入门

swoole协程入门

作者: traveller227 | 来源:发表于2019-01-14 16:48 被阅读23次

    看了韩天峰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!

    相关文章

      网友评论

          本文标题:swoole协程入门

          本文链接:https://www.haomeiwen.com/subject/zrljdqtx.html