1、代码

2、运行

3、解析


1、代码

 package main

 import (
"time"
"fmt"
) func waitFor(ch chan int) {
fmt.Println(time.Now(), "writing ...")
time.Sleep(1e9)
ch <- 10
fmt.Println(time.Now(), "wrote ...")
} func main() {
var a chan int = make(chan int)
var b chan int = make(chan int)
var ch chan int = make(chan int) go waitFor(ch) var r int = 0
fmt.Println(time.Now(), "select ...")
select {
case x := <-a :
fmt.Println(time.Now(), "read from a...")
r = x
case x := <-b :
fmt.Println(time.Now(), "read from b...")
r = x
case x := <-ch :
fmt.Println(time.Now(), "read from ch...")
r = x
}
fmt.Println(time.Now(), "select over.., r = ", r)
time.Sleep(1e9)
fmt.Println(time.Now(), "over..")
}

2、运行

 $ go run timeout.go
2015-07-19 00:35:23.859684465 +0800 CST select ...
2015-07-19 00:35:23.861022451 +0800 CST writing ...
2015-07-19 00:35:24.864462549 +0800 CST wrote ...
2015-07-19 00:35:24.865185396 +0800 CST read from ch...
2015-07-19 00:35:24.874655353 +0800 CST select over.., r = 10
2015-07-19 00:35:25.888486739 +0800 CST over..

3、解析

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

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

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

  4)主线程退出

GO语言练习:channel select 超时机制的更多相关文章

  1. Go 初体验 - channel.2 - 超时机制

    channel 虽然很好用,但是我们也要考虑异常情况,比如:超时 go 语言怎么解决这个超时问题呢? 可以利用 select 语句: select 的用法与 switch 语言非常类似,由 selec ...

  2. go语言之进阶篇 select实现的超时机制

    1.select实现的超时机制 示例: package main import ( "fmt" "time" ) func main() { ch := mak ...

  3. GO语言之channel

    前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...

  4. 深度解密Go语言之channel

    目录 并发模型 并发与并行 什么是 CSP 什么是 channel channel 实现 CSP 为什么要 channel channel 实现原理 数据结构 创建 接收 发送 关闭 channel ...

  5. Netty 超时机制及心跳程序实现

    Netty 超时机制的介绍 Netty 的超时类型 IdleState 主要分为: ALL_IDLE : 一段时间内没有数据接收或者发送 READER_IDLE : 一段时间内没有数据接收 WRITE ...

  6. dubbo与trivial超时机制的深入思考

    说在前面 trivial是根据之前设计的RPC框架而来的(还在增进当中),其中较为不同的一个点为,在客户端去掉了业务线程池,因为既然都要等待,不必要再加一层. 进入正题 有在网上看到这样的信息,“之前 ...

  7. Golang超时机制--2秒内某个函数没被调用就认为超时

    Golang超时机制--2秒内某个函数没被调用就认为超时 需求描述 当一整套流程需要其他程序来调用函数完成时通常需要一个超时机制,防止别人程序故障不调你函数导致你的程序流程卡死 实现demo pack ...

  8. dubbo(九):timeout超时机制解析

    在网络请求时,总会有各种异常情况出现,我们需要提前处理这种情况.在完善的rpc组件dubbo中,自然是不会少了这一层东西的.我们只需要通过一些简单的配置就可以达到超时限制的作用了. dubbo的设计理 ...

  9. 您还有心跳吗?超时机制分析(java)

    注:本人是原作者,首发于并发编程网(您还有心跳吗?超时机制分析),此文结合那里的留言作了一些修改. 问题描述 在C/S模式中,有时我们会长时间保持一个连接,以避免频繁地建立连接,但同时,一般会有一个超 ...

随机推荐

  1. bootstrap组件 2

    bootstrap组件2 <!DOCTYPE html> <html lang="zh-cn"> <head > <meta charse ...

  2. wp8 入门到精通 Animation 背景加字体颜色从下向上变化颜色效果

    <phone:PhoneApplicationPage.Resources> <Style x:Key="ButtonStyle1" TargetType=&qu ...

  3. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  4. Mac OS 您需要安装旧 Java SE 6 运行环境才能打开“XXX” 问题

    问题描述: 今天在Mac OS上安装一个app的时候提示 “您需要安装旧 Java SE 6 运行环境才能打开 XXX” ,在网上搜索了一下,有说要改app的info.plist文件的,将其中的JVM ...

  5. HDU 3461 Code Lock(并查集)

    很好的一个题,思想特别6 题意:给你小写字母个数n,每个字母可以向上翻动,例如:d->c,a->z.然后给你m对数(L,R)(L<=R),表示[L,R]之间可以同时向上翻动,且翻动后 ...

  6. IIS:连接数、并发连接数

    IIS:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数详解 iis性能指标的各种概念:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池 ...

  7. JavaScript入门(2)

    encodeURI()和 decodeURI()作用  编码与解码 encodeURIComponent()和 decodeURIComponent()作用区别是  后者可以处理一些特殊字符进行转义 ...

  8. poj1251 最小生成树

    Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid ...

  9. Visual Studio 设置 Inherited include Directories

    在用Visual Studio进行开发的时候,避免不了要使用一些常用的第三方提供的库.如果是一次两次设置还能让人忍受,但是如果要写很多项目的话,设置这些库真的很让人头疼.不过Visual Studio ...

  10. zookeeper定时清理log

    在zookeeper的目录下新建一个脚本,内容如下(zookeeper bin下面也有zkCleanup.sh脚本,原理一样,都是调用java类) shell_dir=$(cd ")&quo ...