Go 语言基础(17) | 青训营笔记

134 阅读1分钟

CSP

CSP 全称是 Communicating Sequential processes。在 Go 里面 goroutine 之间可以通过通信共享内存,也可以通过共享内存实现通信,推荐前者。

Channel

通信当然要走通道,这个数据结构用 make(chan int) 或者 make(chan int, 2) 创建,前者是无缓冲通道,后者是有两个缓冲单位的通道。

举个例子:

package concurrence

func CalSquare() {
	src := make(chan int)
	dest := make(chan int, 3)
	go func() {
		defer close(src)
		for i := 0; i < 10; i++ {
			src <- i
		}
	}()
	go func() {
		defer close(dest)
		for i := range src {
			dest <- i * i
		}
	}()
	for i := range dest {
		println(i)
	}
}

这个程序里有两个 goroutinesrc 是无缓冲通道,dest 是三个缓冲单位的通道。