使用select完成goroutine中超时功能
来源:互联网 发布:2017淘宝流量突然暴跌 编辑:程序博客网 时间:2024/06/05 10:40
使用select完成goroutine中超时功能
虽然携程是go语言中一个新的概念,嗯,但它本质上依然是属于多线程。超时机制是多线程中是一个非常重要的保障程序的鲁棒性的一个措施;错误是很难预估的,在多线程中更为显著,更容易出现难以预料的错误。
一个异常场景
在go语言中使用channel时需要小心,比如这个用法
i := <-ch
不出问题的话这个是一个很简单的,从ch中读取数据到i中。
但如果ch一直没有人往ch中写数据,那么这个读取动作也就一直无法执行,结果就是这个goroutine将会一直阻塞在这里。
有些人可以说,代码仅仅是我自己使用,我技术高超,不会出现这种低级错误;但往往代码并不是孤立了,通常都会别人使用(ctrl+v 或者参考),一旦对外公开,那么难免会出现这种问题。
所以对于这个,我们需要知道如何使用超时机制保护goroutine不被一直阻塞
go的超时机制
Go语言本身并没有原生的支持超时机制,但是我们可以使用select机制,虽然它并不是专门为超时机制而设计的。
基于上面的问题,如下是一个简易的超时机制处理
timeout := make(chan bool, 1)go func() { time.Sleep(1e9) timeout <- true} ()select { case <- ch: //从ch中读取数据 case <-timeout: //ch一直没有数据写入,超时触发timeout}
可以多多尝试~
0 0
- 使用select完成goroutine中超时功能
- golang基础-chan的select操作、定时器操作、超时控制、goroutine中使用recover
- Golang中不要使用无限循环检查goroutine是否完成工作
- 在connect中使用select实现超时处理
- 线程超时等待方法---linux中select()函数使用
- 论go语言中goroutine的使用
- 论go语言中goroutine的使用
- 使用PLSQL完成功能
- 在循环中使用Select 函数,进行等待超时的使用注意点
- Android模拟器上使用NIO编写客户端中,使用select超时,立马返回0的问题
- 使用select为recvfrom设置超时
- WinSock使用Select设置connect的超时
- 在ant中使用cvs功能自动完成每日构建。
- 无界面程序中使用ActiveX控件完成其功能
- 在应用程序中使用shell命令完成某项功能
- select超时
- goroutine使用最佳实践
- goroutine的使用陷阱
- Linux--根文件系统的挂载过程分析
- Jekyll-Markdown 文章内容自动收缩插件
- 接口
- Ruby x Jekyll 远程调试环境搭建
- FPGA中IBERT 核的应用(三)
- 使用select完成goroutine中超时功能
- cpu与内存
- 文件操作
- 深入理解PHP中的SESSION技术
- 通过父子进程实现消息队列的互相通信
- Xilinx FPGA的配置
- android基本动画,Tween补间动画,属性动画
- IDEA快捷键
- 预加重技术