php那个我是没搞懂,而且是会暂停的。
go那个呢,并不需要暂停,我就是类似另开一个线程,做完了事,返回数据,就闪人,这个还更好理解。PHP那个有点搞不懂。
php那个我是没搞懂,而且是会暂停的。
go那个呢,并不需要暂停,我就是类似另开一个线程,做完了事,返回数据,就闪人,这个还更好理解。PHP那个有点搞不懂。
7 回答5.6k 阅读
6 回答7.1k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
4 回答2.5k 阅读
2 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
在
php
等语言里的yield
,不是协程
语法,而是迭代器
语法。而包括
php
在内的大多数语言实现迭代器
的方式,是通过一个可中断的函数完成的。而
协程
的一个特点就是执行中断,切换上下文。所以就有了通过
迭代器
函数去实现
协程的方案。这种方案充分利用了迭代器
可中断的特点来模拟协程
中断,而利用闭包函数的上下文独立性,实现协程
的上下文切换。总结起来,什么是协程,协程是通过切换运行方法和上下文,来在同一个空间中完成不同的处理任务(注意,不是另外开线程)。
那么协程怎么实现,
goroutine
就是协程的一种实现方式。而通过
迭代器
实现协程,就又是另外一种方式。两者的区别在于,
goroutine
是已经存在的实现。相当于已经成品的车,你理解起来会相当容易。而
迭代器
只是提供者实现协程
的方法,具体要实现协程,还需要自己去写代码完成。这就好像是汽车的零件,你需要自己组装,所以还需要深入学习你才能理解它的原理