GO语言模拟通信过程中信道缓冲值大小对结果的影响

首先,我们写出下面的代码,在同一过程中模拟一下发送和接受数字的过程:

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个数字,只能分批来接受。进一步推测接受和发送是并行的,每次运行的结果不一定会有重复性。

分享成果,随喜正能量。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180314A1LFX400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券