PHP 协程是什么意思?-PHP问题

资源魔 28 0

PHP 协程是甚么意义?

PHP协程就相称于线程,线程意义就是正在切换线程上下文时,要先保留上一个线程的上下文,而后执行下一个线程,当前提餍足时,切换回上一个线程,并规复上下文,协程也是这样,只不外协程是由用户调剂的,而线程是零碎调剂的。

PHP 协程用法

协程的支持是正在迭代天生器的根底上, 添加了能够回送数据给天生器的性能(挪用者发送数据给被挪用的天生器函数). 这就把天生器到挪用者的单向通讯转变成二者之间的双向通讯.

通报数据的性能是经过迭代器的send()办法完成的. 上面的logger()协程是这类通讯若何运转的例子:

<?php
function logger($fileName) {
    $fileHandle = fopen($fileName, 'a');
    while (true) {
        fwrite($fileHandle, yield . "\n");
    }
}
$logger = logger(__DIR__ . '/log');
$logger->send('Foo');
$logger->send('Bar')
?>

正如你能看到,这儿yield不作为一个语句来应用, 而是用作一个表白式, 即它能被演变成一个值. 这个值就是挪用者通报给send()办法的值. 正在这个例子里, yield表白式将起首被"Foo"代替写入Log, 而后被"Bar"代替写入Log.

下面的例子里演示了yield作为承受者, 接上去咱们看若何同时进行接纳以及发送的例子:

<?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表白式两边的括号正在PHP7之前没有是可选的, 也就是说正在PHP5.5以及PHP5.6中圆括号是必需的.

第二点,你可能曾经留意到挪用current()以前不挪用rewind().这是由于天生迭代工具的时分曾经隐含地执行了rewind操作.

保举教程:《PHP教程》

以上就是PHP 协程是甚么意义?的具体内容,更多请存眷资源魔其它相干文章!

标签: php php教程 php故障解决 php使用问题

抱歉,评论功能暂时关闭!