php-协程的实现

协程的实现参考:

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

https://segmentfault.com/a/1190000012457145?utm_source=tuicool&utm_medium=referral

既然协程性能这么高,那为什么使用的还是很少呢,还是其使用场景不是很多,加上协程还是有点不好理解。

协程的作用是实施任务调度,由于是程序自己来调度的,那么会有一些程序恶意的占用CPU,而不会交出CPU控制权;这与系统调度的区别在于,
操作系统的调度不管你程序喜不喜欢,该切就切。

协程的基础是迭代生成器:Generator
生成器为可中断的函数。
而Generator对象实现了Iterator接口,因此Generator是可以被迭代的。
而迭代生成器的实现需要 yield 关键字,作用是中断程序,交出CPU控制权。
协程的任务一般是一个函数。

比如:

function xrange($start, $end, $step = 1) {
    for ($i = $start; $i <= $end; $i += $step) {
        yield $i;
    }
}

x = x r a n g e ( 1 , 1000000 ) ; / / v a r d u m p ( x = xrange(1, 1000000); // var_dump( x=xrange(1,1000000);//vardump(x);

foreach ($x as $num) {
    echo $num, "\n";
}

我们可以调用生成器的send()方法,往生成器中yield所在的地方传递数据。
并且send之后会触发一次next操作。

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

.......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值