Go lang concurrency: select with channels
来源:互联网 发布:淘宝亦美珊模特是谁 编辑:程序博客网 时间:2024/05/13 17:56
package mainimport "fmt"func fibonacci(c, quit chan int) { x, y := 0, 1 for { select { case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return } }}func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i++ { fmt.Println(<-c) } quit <- 0 }() fibonacci(c, quit)}
- 在go routine中不断从c中读取十次数据,由于c一开始是空的,必然阻塞在读取操作;
- 调用fibonacci方法,quit条件不满足,只能在c中被放入了一个x的值并进行一次计算;
- 步骤1中阻塞的routine被唤醒(<-c操作条件满足),输出步骤2中的放入的值;
- routine循环,阻塞,fibonacci下一次循环将再次解除阻塞;
- 由于fibonacci和routine访问的是同一个c channel,不需要加锁来做同步就能避免routine同主程序间的竞争(比如routine没等主程序输出完就放入新的值进去等)
- routine循环结束后,quit放入了0值,由于c中的数据已经被输出完了,只能执行case <-quit,条件满足,退出。
0 0
- Go lang concurrency: select with channels
- Go语言学习笔记 --- concurrency、channel、select
- python channels笔记--Getting started with channels
- Go 的并发 Concurrency
- Go并发concurrency
- PostgreSQL Concurrency with MVCC
- Creating Concurrency with Threads
- Visualizing Concurrency Patterns in Go
- Go Concurrency Patterns 2012 Notes
- Go 并发concurrency 学习笔记
- Go语言学习笔记(3)-goroutine,Channels
- 6.16 Creating Concurrency with Threads
- Go Concurrency Patterns: Timing out, moving on
- Go编程基础—并发(concurrency)
- Concurrency in Go.pdf 英文原版免费下载
- 在go中使用linked channels进行数据广播
- linux网络通信之concurrency模型select
- go语音之select
- magento 第四章 出现 "Fatal error:Call to a member function load() on a non-object in \Abstract.php" 问题
- 一个靠谱的phpredisadmin文件
- 敏捷遇上UML(2014.4.19 广州站)- 活动报道
- java基础:环境搭建(一)
- [转]ORACLE函数大全
- Go lang concurrency: select with channels
- 团队扩充
- 线程栈空间的大小
- windows 如何查看端口占用情况?
- Android 有效地展示图片(二)Processing Bitmaps Off the UI Thread 在ui线程外处理bitmap
- android 安装APP时,出现apk waiting for device这种状况!
- 有向图最小路径覆盖方法浅析、证明 //hdu 3861
- 斯坦福大学Andrew Ng教授主讲的《机器学习》公开课观后感
- 崔天翼的找工作总结