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)
}
}
这个程序里有两个 goroutine,src 是无缓冲通道,dest 是三个缓冲单位的通道。