猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
php 的yield叫协程,go的goroutine也叫协程,它这两种完全不一样吧?
php那个我是没搞懂,而且是会暂停的。
go那个呢,并不需要暂停,我就是类似另开一个线程,做完了事,返回数据,就闪人,这个还更好理解。PHP那个有点搞不懂。
人到中年有点甜
浏览 564
回答 1
1回答
大话西游666
在php等语言里的yield,不是协程语法,而是迭代器语法。 而包括php在内的大多数语言实现迭代器的方式,是通过一个可中断的函数完成的。 而协程的一个特点就是执行中断,切换上下文。 所以就有了通过迭代器函数去实现协程的方案。这种方案充分利用了迭代器可中断的特点来模拟协程中断,而利用闭包函数的上下文独立性,实现协程的上下文切换。 总结起来,什么是协程,协程是通过切换运行方法和上下文,来在同一个空间中完成不同的处理任务(注意,不是另外开线程)。 那么协程怎么实现,goroutine就是协程的一种实现方式。 而通过迭代器实现协程,就又是另外一种方式。 两者的区别在于,goroutine是已经存在的实现。相当于已经成品的车,你理解起来会相当容易。 而迭代器只是提供者实现协程的方法,具体要实现协程,还需要自己去写代码完成。这就好像是汽车的零件,你需要自己组装,所以还需要深入学习你才能理解它的原理
1
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
PHP
php如何把参数放在Http Request Heade????
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续