• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

GO语言练习:channel缓冲机制

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、代码

2、运行

3、解析


 

1、代码 buffer.go

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "time"
 6 )
 7 
 8 func readThread(ch chan int) {
 9     fmt.Println("read for reading...")
10     for i := range ch {
11         fmt.Println("get i : ", i)
12         if 20 == i { 
13             break
14         }   
15         time.Sleep(1e8)
16     }   
17     fmt.Println("read over...")
18 }
19 
20 func main() {
21     ch := make(chan int, 1024)
22     go readThread(ch)
23     time.Sleep(1e9 * 2)
24     for i := 1; i <= 20; i++ {
25         ch <- i
26     }
27     fmt.Println("waitting for reading...")
28     time.Sleep(1e9 * 3)
29     fmt.Println("over...")
30 }

2、运行

 1 $ go run buffer.go 
 2 read for reading...
 3 waitting for reading...
 4 get i :  1
 5 get i :  2
 6 get i :  3
 7 get i :  4
 8 get i :  5
 9 get i :  6
10 get i :  7
11 get i :  8
12 get i :  9
13 get i :  10
14 get i :  11
15 get i :  12
16 get i :  13
17 get i :  14
18 get i :  15
19 get i :  16
20 get i :  17
21 get i :  18
22 get i :  19
23 get i :  20
24 read over...
25 over...

3、解析

  根据运行结果进行分析:

  1)先运行的readThread读线程,读线程已经做好了读的准备,但此时channel中还没有数据,所以阻塞了。等待读动作。

  2)主线程中,一次性向channel中写入大量数据,由于有缓冲机制,所以可以一次性的写入多个数据而不会阻塞。当主线程写完了数据,就开始等待读线程的读动作结束。

  3)channel中开始有数据,读线程开始读数据,每0.1秒钟读取一个数据,一共读取20次。读取结束了,打印read over。

  4)主线程等待的时间到了,返回,退出

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap