php那个我是没搞懂,而且是会暂停的。go那个呢,并不需要暂停,我就是类似另开一个线程,做完了事,返回数据,就闪人,这个还更好理解。PHP那个有点搞不懂。
1 回答

大话西游666
TA贡献1817条经验 获得超14个赞
在php
等语言里的yield
,不是协程
语法,而是迭代器
语法。
而包括php
在内的大多数语言实现迭代器
的方式,是通过一个可中断的函数完成的。
而协程
的一个特点就是执行中断,切换上下文。
所以就有了通过迭代器
函数去实现
协程的方案。这种方案充分利用了迭代器
可中断的特点来模拟协程
中断,而利用闭包函数的上下文独立性,实现协程
的上下文切换。
总结起来,什么是协程,协程是通过切换运行方法和上下文,来在同一个空间中完成不同的处理任务(注意,不是另外开线程)。
那么协程怎么实现,goroutine
就是协程的一种实现方式。
而通过迭代器
实现协程,就又是另外一种方式。
两者的区别在于,goroutine
是已经存在的实现。相当于已经成品的车,你理解起来会相当容易。
而迭代器
只是提供者实现协程
的方法,具体要实现协程,还需要自己去写代码完成。这就好像是汽车的零件,你需要自己组装,所以还需要深入学习你才能理解它的原理
- 1 回答
- 0 关注
- 563 浏览
添加回答
举报
0/150
提交
取消