跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教下 PHP 关于协程的一些知识
未分類
14 3 月 2021

请教下 PHP 关于协程的一些知识

请教下 PHP 关于协程的一些知识

資深大佬 : awanganddong 1

1.迭代器是一个接口,内部定义了一些方法。生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__iter__和 next 方法),不需要再手动实现两方法。(这种说法不知道对不对)  2.php 协程的实现通过 yield 和 generator 。generator 提供了一种方便的实现简单的 Iterator (迭代器)的方式,使用 Generator 实现 Iterator 不需要创建一个类来继承 Iterator 接口。(对这个具体实现,能用大白话讲下吗)  3.Generator (无堆栈轻量级并发实现)这里无堆栈轻量级会存在什么缺陷?   

大佬有話說 (6)

  • 資深大佬 : SimbaPeng

    这不是 Python?

  • 主 資深大佬 : awanganddong

    参考 在 PHP 中使用协程实现多任务调度

    https://www.laruence.com/2015/05/28/3038.html

    有些含义在 php 哪里不好找,就去看看隔壁 python 的理解,应该大同小异。

  • 主 資深大佬 : awanganddong

    “`
    function gen($max)
    {
    for ($i=0; $i<$max; $i++) {
    yield $i;
    }
    }

    $gen = gen(5);

    foreach ($gen as $key=>$val) {
    var_dump($key . “=>” . $val);
    }

    //以下是对应的输出值
    string(4) “0=>0”
    string(4) “1=>1”
    string(4) “2=>2”
    string(4) “3=>3”
    string(4) “4=>4”

    “`

    yield 具体的执行流程可以参考这个帖子

    ## PHP 生成器–动态生成内容的数组
    https://segmentfault.com/a/1190000015149274

  • 主 資深大佬 : awanganddong

    “`
    <?php

    function gen($max)
    {
    for ($i=0; $i<$max; $i++) {
    yield $i=>$i+1; (注意这里是=>,而不是=号。这里为什么不能是等号暂时不明)
    }
    }

    $gen = gen(5);

    foreach ($gen as $key=>$val) {
    var_dump($key . “=>” . $val);
    }

    //以下是输出的值

    string(4) “0=>1”
    string(4) “1=>2”
    string(4) “2=>3”
    string(4) “3=>4”
    string(4) “4=>5”

    “`

  • 主 資深大佬 : awanganddong

    “`
    function gen() {
    $ret = (yield ‘yield1’);
    var_dump($ret);
    echo ‘A1111’.PHP_EOL;
    $ret = (yield ‘yield2’);
    echo “B1111”.PHP_EOL;
    }
    $gen = gen();
    var_dump($gen->current());
    echo ‘A’.PHP_EOL;
    var_dump($gen->send(‘ret1’));
    echo ‘B’.PHP_EOL;

    string(6) “yield1”
    A
    string(4) “ret1”
    A1111
    string(6) “yield2”
    B
    “`
    上边这个不太理解的点是$gen->send()这里
    //结论
    send 方法将自己的发送的值传递给上一个 yield 表达式的结果,
    然后继续隐式的继续执行下一个 yield 并接收下一个 yield 的值

  • 資深大佬 : rqrq

    https://github.com/elarity/advanced-php/blob/master/17.%20PHP%E4%B8%AD%E7%9A%84yield%EF%BC%88%E4%B8%8A%EF%BC%89.md

    https://github.com/elarity/advanced-php/blob/master/18.%E5%A1%AB%E5%9D%91%E4%B9%8BPHP%E7%9A%84yield%E5%92%8C%E5%8D%8F%E7%A8%8B%E5%9C%A8%E4%B8%80%E8%B5%B7%E7%9A%84%E6%97%A5%E5%AD%90%E9%87%8C.md

    这里说得比较清楚。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具