为了账号安全,请及时绑定邮箱和手机立即绑定

php 的yield叫协程,go的goroutine也叫协程,它这两种完全不一样吧?

php 的yield叫协程,go的goroutine也叫协程,它这两种完全不一样吧?

PHP
人到中年有点甜 2019-03-14 20:35:25
php那个我是没搞懂,而且是会暂停的。go那个呢,并不需要暂停,我就是类似另开一个线程,做完了事,返回数据,就闪人,这个还更好理解。PHP那个有点搞不懂。
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

php等语言里的yield,不是协程语法,而是迭代器语法。
而包括php在内的大多数语言实现迭代器的方式,是通过一个可中断的函数完成的。

协程的一个特点就是执行中断,切换上下文。

所以就有了通过迭代器函数去实现协程的方案。这种方案充分利用了迭代器可中断的特点来模拟协程中断,而利用闭包函数的上下文独立性,实现协程的上下文切换。

总结起来,什么是协程,协程是通过切换运行方法和上下文,来在同一个空间中完成不同的处理任务(注意,不是另外开线程)。
那么协程怎么实现,goroutine就是协程的一种实现方式。
而通过迭代器实现协程,就又是另外一种方式。
两者的区别在于,goroutine是已经存在的实现。相当于已经成品的车,你理解起来会相当容易。
迭代器只是提供者实现协程的方法,具体要实现协程,还需要自己去写代码完成。这就好像是汽车的零件,你需要自己组装,所以还需要深入学习你才能理解它的原理

查看完整回答
1 反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 563 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信