14.12 链式协程
...小于 1 分钟
14.12 链式协程
package chapter_14
import "fmt"
const N = 100000
func mainChanning() {
leftmost := make(chan int)
var left, right chan int = nil, leftmost
for i := 0; i < N; i++ {
left, right = right, make(chan int)
go f(left, right)
}
right <- 0
x := <-leftmost
fmt.Println(x) // 100000
}
func f(left, right chan int) {
left <- 1 + <-right
}
right <-0
: 启动链式协程的计算。 因为无缓冲通道的阻塞,函数f
在最右侧的通道可用之前不会执行。 当最右侧通道(通道链尾)可用时,开始执行x := <-leftmost
: 等待协程链完成
Powered by Waline v2.15.2