首先,我们写出下面的代码,在同一过程中模拟一下发送和接受数字的过程:
1 package main
2 import (
3 "fmt"
4 )
5 func main() {
6 jobs := make(chan int, 3)//给通道3个缓冲
7 done := make(chan bool)
8 go func() {
9 for {
10 j, more :=
11 if more {
12 fmt.Println("接受到数字:", j)
13 } else {
14 fmt.Println("接受到所有数字,完成")
15 done
16 return
17 }
18 }
19 }()
20 for j := 1; j
21 fmt.Println("发送数字:", j)
22 jobs
23 }
24 close(jobs)
25 fmt.Println("发送完所有数字")
26
27 }
上述例子中要完成的事情是:
一 发送10个数字
二 发送完成后提示
三 接受10个数字(用go func 的闭包来完成)
四 接受完成后提示
第一种情况:jobs := make(chan int, 3)//给通道3个缓冲
第二种情况:jobs := make(chan int, 5)//给通道5个缓冲
第三种情况:jobs := make(chan int, 10)//给通道10个缓冲
第四种情况:jobs := make(chan int, 15)//给通道15个缓冲
由此可见:
1. 在第三和第四种情况中,由于缓冲值足够,所以发送和接受数字是简单完成的。
2,在第一和第二种情况中,由于缓冲不足完全容纳10个数字,只能分批来接受。进一步推测接受和发送是并行的,每次运行的结果不一定会有重复性。
分享成果,随喜正能量。