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. Spring之ResourceLoader加载资源

    Resource与ResourceLoader对比 1.Resource接口定义了应用访问底层资源的能力. 通过FileSystemResource以文件系统绝对路径的方式进行访问: 通过ClassP ...

  2. linux脚本编程技术

    linux脚本编程技术 一.什么是脚本 脚本是一个包含一系列命令序列的可执行(777)文本文件.当运行这个脚本文件时,文件中包含的命令序列将得到自动执行. 二.脚本编程 #!/bin/sh 首行固定格 ...

  3. 设定自动获得DNS服务器地址

    情况说明:操作系统是Win7 64位, 网络是有线 1 2 3 4 5

  4. C语言判断文件是否存在(转)

    int   access(const   char   *filename,   int   amode); amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1. 这个函 ...

  5. codeforces724-A. Checking the Calendar 日期题

    首先有这样一个显然的事实,那就是每个月的第一天可以是星期x,x可以取遍1~7 因为日期一直在往后退,总有一年能轮到分割线那天,因为本来其实压根就没有月份的划分,月份划分是人为的 而且我们也不知道开始的 ...

  6. 金融左侧js错误

  7. Android自动化压力测试之Monkey Test (三)

    Monkey 是什么? Monkey是Google提供的一个用于稳定性与压力测试的命令行工具. Monkey路径: 路径:/System/framework/monkey.jar 启动脚本路径:/sy ...

  8. kylin学习笔记

    阅读官网,学到哪就写到哪 1.需要先建立Model 2.kylin需要配置事实表,纬度表:可以自定义join.  我的用法和官方建议的不同,我是直接在hive中将所有的取join成一个单表,再根据单表 ...

  9. js倒计时(可定义截止日期)

    <div id="times_wrap" class="time_num"> 距离结束时间: <div class="time_w& ...

  10. POJ 3974 回文串-Manacher

    题目链接:http://poj.org/problem?id=3974 题意:求出给定字符串的最长回文串长度. 思路:裸的Manacher模板题. #include<iostream> # ...