php在php5.5的时候引入了generator和coroutine,从核心上提出了一种方法去写不阻塞的IO,当然这和node的event loop还是有比较大的区别的,它的主要理念是:把几个大任务分别分成多个小步轮流执行,有某个小任务在等待系统io的话,就跳过它,执行下一个小任务,这样总体提升了代码的效率。
0x1: yield表达式是什么?
非常简单,描述yield表达式的只有两个关键词: 中断点 和 占位符(自己总结的两点,只属于一种感性的记忆方式,并不是官方给出的专业词汇)。
举个简单的例子:
function gen() {
$tid = (yield 1 + 1);
for ($i = 1; $i <= 10; ++$i) {
echo "This is $tid task iteration $i.\n";
yield $i;
}
}
//$t1是[generator](http://php.net/manual/en/class.generator.php)类的实例(instance)
$t1 = gen();
//取出yield后面的表达式的结构,并没有进行赋值就暂停了当前的操作 `$tid = (yield 1 + 1) `,(特性一:中断点)
$r1 = $t1->current();
//结果为 2
echo $r1;
//将字符'+++'(特性二:占位符),替换到刚才暂停