GO语言练习:channel 缓冲机制
2015-07-18 10:33
716 查看
1、代码
2、运行
3、解析
1、代码 buffer.go
2、运行
3、解析
根据运行结果进行分析:
1)先运行的readThread读线程,读线程已经做好了读的准备,但此时channel中还没有数据,所以阻塞了。等待读动作。
2)主线程中,一次性向channel中写入大量数据,由于有缓冲机制,所以可以一次性的写入多个数据而不会阻塞。当主线程写完了数据,就开始等待读线程的读动作结束。
3)channel中开始有数据,读线程开始读数据,每0.1秒钟读取一个数据,一共读取20次。读取结束了,打印read over。
4)主线程等待的时间到了,返回,退出
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)主线程等待的时间到了,返回,退出
相关文章推荐
- Django笔记 —— 基础部分总结
- 在Django的视图中使用form对象的方法
- 详解Django中的form库的使用
- Google的十大信条
- HDU 1018 斯特林公式应用
- Category用法
- 详解Django中的form库的使用
- 在Django的视图中使用form对象的方法
- 在Django的URLconf中进行函数导入的方法
- 在Django的URLconf中使用多个视图前缀的方法
- 在Django的URLconf中使用命名组的方法
- Django中传递参数到URLconf的视图函数中的方法
- 在Django框架中伪造捕捉到的URLconf值的方法
- Django的URLconf中使用缺省视图参数的方法
- OC基础---protocol、category和继承的区别
- Django笔记 —— 表单(form)
- 安装go语言环境
- 在Django框架中编写Contact表单的教程
- Algorithms—142.Linked List Cycle II
- 简单解析Django框架中的表单验证