• php 协程理解


    生成器
    生成器最基本的思想也是一个函数,这个函数的返回值是依次输出,而不是只返回一个单独的值。或者,换句话说,生成器使你更方便的实现了迭代器接口。下面通过实现一个xrange函数来简单说明:
     
    <?php
    function xrange($start, $end, $step = 1) {
        for ($i = $start; $i <= $end; $i += $step) {
            yield $i;
        }
    }
    foreach (xrange(1, 1000000) as $num) {
        echo $num, " ";
    }
    生成器为可中断的函数
    要从生成器认识协同程序,理解它们内部是如何工作的非常重要:生成器是可中断的函数,在它里面,yield构成了中断点。
     
    协程
    协程给上面功能添加的主要东西是回送数据给生成器的能力。这将把生成器到调用者的单向通信转变为两者之间的双向通信。
    用send 将数据给函数
     
    <?php
    function gen() {
        $ret = (yield 'yield1');
        var_dump($ret);
        $ret = (yield 'yield2');
        var_dump($ret);
    }
    $gen = gen();
    var_dump($gen->current());    // string(6) "yield1"
    var_dump($gen->send('ret1')); // string(4) "ret1"   (the first var_dump in gen)
                                  // string(6) "yield2" (the var_dump of the ->send() return value)
    var_dump($gen->send('ret2')); // string(4) "ret2"   (again from within gen)
                                  // NULL               (the return value of ->send())
     
    使用协程主要是实现多任务工作。
    这个时候你应当明白协程和任务调度之间的联系:yield指令提供了任务中断自身的一种方法,然后把控制传递给调度器。因此协程可以运行多个其他任务。更进一步来说,yield可以用来在任务和调度器之间进行通信。
    生成器-任务-调度器 
     
  • 相关阅读:
    CentOS 6.10 安装mysql
    yum安装no more mirrors to try
    mysql密码问题
    tomcat的安装部署(CentOS8)(VM)
    tomcat的安装部署(windows10)
    docker中mongdb常用操作
    iphone手机卡顿解决方案
    常用sql进阶语句
    关键时刻,让你的iphone拒绝掉的所有来电
    jenkins环境安装(windows)
  • 原文地址:https://www.cnblogs.com/biggerCoder/p/5065908.html
Copyright © 2020-2023  润新知