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