关于go中的协程,有一个小小的问题

Pikachu · · 1033 次点击
我后来重新学习了一下阻塞,又测试了一下,我发现ch的地址一直没有变化,无论第几次循环,ch 的地址都没有变化,但是 ch1 的地址每次循环都会更改。 所以我猜测一下,每次循环新建的这个`filter()`方法都是并行存在的,任务就是筛选出当前ch通道中能被prime整除的数。并且把ch1当前的值复制给 ch 中(ch 只是更新了一下数据,`generate()`会趁通道不阻塞时,往 ch 中追加数据。并且当通道 ch 不会被阻塞时,随机一个 `filter()` 方法筛选数据。)。我在下面追加了我猜测的运行图。
#7
更多评论
不太明白你的想法,你这里声明的 ch 是 unbuffered 的,所以 ch 并不会像你注释的那样同一个时刻有多个数。而且当执行到 ch = ch1 的时候,这里的 ch 已经跟前面 `go generate(ch)` 的 ch 不是一个 ch 了。
#1
我其实想知道,每次循环后ch通道是个什么状态(其中的值是怎么改变的)。 你是说每次循环都会用值覆盖掉之前的ch通道吗?`go generate(ch)` 方法中是一个无限循环往通道赋值的一个函数。所以是第一次循环执行完毕之后 `generate()` 这个方法就已经被结束掉了吗? 其实我一直感觉协程应该是没有什么执行顺序的,但是我看到的感觉还是顺序执行的呢?
#2