尝试多个channel同时触发时,select的表现:

package main

import (
"fmt"
"time"
) func loop(ch chan int){
for i := ; i < ; i++ {
ch <- i
}
close(ch)
} func main() {
ch1 := make(chan int, )
ch2 := make(chan int, ) go loop(ch1)
go loop(ch2) for{
select{
case j, ok := <- ch2:
if false == ok {
goto End
}
fmt.Println("ch2", j) case i,ok := <- ch1:
if false == ok {
goto End
}
fmt.Println("ch1", i) case <-time.After( * time.Second):
fmt.Println("time's up")
goto End
}
} End:
fmt.Println("finish!") }

输出

ch1 0
ch1 1
ch1 2
ch1 3
ch1 4
ch1 5
ch1 6
ch1 7
ch1 8
ch1 9
finish!
package main

import (
"fmt"
"time"
) func loop(ch chan int){
for i := ; i < ; i++ {
ch <- i
}
close(ch)
} func main() {
ch1 := make(chan int, )
ch2 := make(chan int, ) go loop(ch2)//把ch2的调度提到前面
go loop(ch1) for{
select{
case j, ok := <- ch2:
if false == ok {
goto End
}
fmt.Println("ch2", j) case i,ok := <- ch1:
if false == ok {
goto End
}
fmt.Println("ch1", i) case <-time.After( * time.Second):
fmt.Println("time's up")
goto End
}
} End:
fmt.Println("finish!") }

输出:

ch2 0
ch2 1
ch2 2
ch2 3
ch2 4
ch2 5
ch2 6
ch2 7
ch2 8
ch2 9
finish!
package main

import (
"fmt"
"time"
"runtime"
) func loop(ch chan int){
for i := ; i < ; i++ {
runtime.Gosched()//给别的goroutine让渡出一些调度时间
ch <- i
}
close(ch)
} func main() {
ch1 := make(chan int, )
ch2 := make(chan int, ) go loop(ch2)
go loop(ch1) for{
select{
case j, ok := <- ch2:
if false == ok {
goto End
}
fmt.Println("ch2", j) case i,ok := <- ch1:
if false == ok {
goto End
}
fmt.Println("ch1", i) case <-time.After( * time.Second):
fmt.Println("time's up")
goto End
}
} End:
fmt.Println("finish!") }

输出:

ch2 0
ch1 0
ch2 1
ch1 1
ch2 2
ch1 2
ch2 3
ch1 3
ch2 4
ch1 4
ch2 5
ch1 5
ch2 6
ch1 6
ch2 7
ch1 7
ch2 8
ch1 8
ch2 9
finish!

最新文章

  1. Hibernated的sql查询
  2. jQuery -&gt; bind / live / delegate 的终结者 - on
  3. 纯CSS3制作学生入学档案表单样式代码
  4. Java:日历类、日期类、数学类、运行时类、随机类、系统类
  5. iOS 重力感应 学习1 陀螺仪 水平仪 指南针
  6. 用defy来潜水最终还是挂了........
  7. Linux守护进程详解(init.d和xinetd)
  8. ubuntu navicat110 for mysql 装配与破解
  9. 最小生成树---&gt;NYOJ-38 布线问题
  10. c语言局部变量 静态局部变量 全局变量与静态全局变量
  11. asp.net生成缩略图、文字图片水印
  12. 大写String和小写string的区别
  13. mini2440驱动奇谭——ADC驱动与測试(动态挂载驱动)
  14. sqlserver安全加固
  15. win8系统不小心禁用了管理员权限怎么解决
  16. Redis命令总结及其基础知识讲述
  17. 「七天自制PHP框架」第四天:模型关联
  18. 排序算法之选择排序的思想以及Java实现
  19. 013 JstlView
  20. 前端框架之Vue(6)-列表渲染

热门文章

  1. 【Java】 剑指offer(28) 对称的二叉树
  2. 049 CDH商业版本的搭建(hadoop5.3.6 +hive+sqoop)
  3. C#中将string转换为float
  4. 关于make: *** No rule to make target `clean&#39;. Stop.这个莫名其妙问题的解决方法
  5. Java动态追踪技术探究
  6. 生产环境中tomcat的配置
  7. (华中科大)江南雨烟 C++ STL 专栏
  8. BZOJ2861 : 双向边定向为单向边
  9. Microsoft visual Studio2017 中番茄visual assist 破解
  10. Android中POST请求代码