您的位置:首页 > 编程语言 > Go语言

GO语言练习:channel 缓冲机制

2015-07-18 10:33 716 查看
1、代码

2、运行

3、解析

1、代码 buffer.go

package main

import (
"fmt"
"time"
)

func readThread(ch chan int) {
fmt.Println("read for reading...")
for i := range ch {
fmt.Println("get i : ", i)
if 20 == i {
break
}
time.Sleep(1e8)
}
fmt.Println("read over...")
}

func main() {
ch := make(chan int, 1024)
go readThread(ch)
time.Sleep(1e9 * 2)
for i := 1; i <= 20; i++ {
ch <- i
}
fmt.Println("waitting for reading...")
time.Sleep(1e9 * 3)
fmt.Println("over...")
}


2、运行

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


3、解析

  根据运行结果进行分析:

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

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

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

  4)主线程等待的时间到了,返回,退出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: