Erlo

GO语言练习:channel select 超时机制

时间:2021-05-31   阅读:59次   来源:jQuery中文网
页面报错
点赞

1、代码

2、运行

3、解析


 

1、代码

 1 package main
 2 
 3 import (
 4     "time"
 5     "fmt"
 6 )
 7 
 8 func waitFor(ch chan int) {
 9     fmt.Println(time.Now(), "writing ...")
10     time.Sleep(1e9)
11     ch <- 10
12     fmt.Println(time.Now(), "wrote ...")
13 }
14 
15 func main() {
16     var a chan int = make(chan int)
17     var b chan int = make(chan int)
18     var ch chan int = make(chan int)
19 
20     go waitFor(ch)
21 
22     var r int = 0
23     fmt.Println(time.Now(), "select ...")
24     select {
25     case x := <-a :
26         fmt.Println(time.Now(), "read from a...")
27         r = x
28     case x := <-b :
29         fmt.Println(time.Now(), "read from b...")
30         r = x
31     case x := <-ch :
32         fmt.Println(time.Now(), "read from ch...")
33         r = x
34     }
35     fmt.Println(time.Now(), "select over.., r = ", r)
36     time.Sleep(1e9)
37     fmt.Println(time.Now(), "over..")
38 }

2、运行

1 $ go run timeout.go 
2 2015-07-19 00:35:23.859684465  0800 CST select ...
3 2015-07-19 00:35:23.861022451  0800 CST writing ...
4 2015-07-19 00:35:24.864462549  0800 CST wrote ...
5 2015-07-19 00:35:24.865185396  0800 CST read from ch...
6 2015-07-19 00:35:24.874655353  0800 CST select over.., r =  10
7 2015-07-19 00:35:25.888486739  0800 CST over..

3、解析

  1)主线程中的select开始运行,对select中的3个channel进行阻塞等待

  2)在线程(协程)waitFor中向ch写入数据

  3)select收到数据,进行读取

  4)主线程退出

 


作者: fengbohello
链接: http://www.cnblogs.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

到此这篇关于“GO语言练习:channel select 超时机制”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:

评论留言

还没有评论留言,赶紧来抢楼吧~~

吐槽小黑屋()

* 这里是“吐槽小黑屋”,所有人可看,只保留当天信息。

  • Erlo吐槽

    Erlo.vip2021-09-25 00:05:16Hello、欢迎使用吐槽小黑屋,这就是个吐槽的地方。
  • 返回顶部

    给这篇文章打个标签吧~

    棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认