14.12 链式协程

Kesa...小于 1 分钟

14.12 链式协程

14_12_chaning,go

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