当前位置: 首页 > 编程笔记 >

Go语言如何并发超时处理详解

蓬意致
2023-03-14
本文向大家介绍Go语言如何并发超时处理详解,包括了Go语言如何并发超时处理详解的使用技巧和注意事项,需要的朋友参考一下

实现原理:

并发一个函数,等待1s后向timeout写入数据,在select中如果1s之内有数据向其他channel写入则会顺利执行,如果没有,这是timeout写入了数据,则我们知道超时了。

实现代码:

package main 
import "fmt"
import "time"
func main() {
 ch := make(chan int, 1)
 timeout := make(chan bool, 1)
 // 并发执行一个函数,等待1s后向timeout写入true
 go func() {
 time.Sleep(1000)
 timeout <- true
 }()
 // 这里会等待ch或timeout读出数据
 // 因为一直没有向ch写入数据
 // 在1s后向timeout写入了数据
 // 所以执行了timeout的case
 // 利用这个技巧可以实现超时操作
 select {
 case <- ch :
 fmt.Println("read from ch")
 case <- timeout :
 fmt.Println("time out...")
 }
}

总结

以上就是这篇文章的全部内容,希望对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

 类似资料:
  • 本文向大家介绍详解go语言的并发,包括了详解go语言的并发的使用技巧和注意事项,需要的朋友参考一下 1、启动go语言的协程 2、runtime.Goexit()方法。立即终止当前的协程 3、runtime.GOMAXPROCS()表示go使用几个cpu执行代码 4、管道定义和创建管道 5、管道的缓冲 6、关闭管道和接受关闭管道的信号 7、只读管道和只写管道和生产者和消费者模型 8、Timer定时器

  • 本文向大家介绍Go语言并发技术详解,包括了Go语言并发技术详解的使用技巧和注意事项,需要的朋友参考一下 有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行。 goroutine goroutine是Go并行设计的核心。goroutine说到底其实就是线程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个

  • 本文向大家介绍Go并发调用的超时处理的方法,包括了Go并发调用的超时处理的方法的使用技巧和注意事项,需要的朋友参考一下 之前有聊过 golang 的协程,我发觉似乎还很理论,特别是在并发安全上,所以特结合网上的一些例子,来试验下go routine中 的 channel, select, context 的妙用。 场景-微服务调用 我们用 gin(一个web框架) 作为处理请求的工具,需求是这样的

  • 主要内容:net 包中的例子,错误接口的定义格式,自定义一个错误,示例:在解析中使用自定义错误Go语言的错误处理思想及设计包含以下特征: 一个可能造成错误的函数,需要返回值中返回一个错误接口(error),如果调用是成功的,错误接口将返回 nil,否则返回错误。 在函数调用后需要检查错误,如果发生错误,则进行必要的错误处理。 Go语言没有类似 Java 或 .NET 中的异常处理机制,虽然可以使用 defer、panic、recover 模拟,但官方并不主张这样做,Go语言的设计者认为其他

  • 通过上一节《 Go语言goroutine》的学习,关键字 go 的引入使得在Go语言中并发编程变得简单而优雅,但我们同时也应该意识到并发编程的原生复杂性,并时刻对并发中容易出现的问题保持警惕。 事实上,不管是什么平台,什么编程语言,不管在哪,并发都是一个大话题。并发编程的难度在于协调,而协调就要通过交流,从这个角度看来,并发单元间的通信是最大的问题。 在工程上,有两种最常见的并发通信模型:共享数据

  • 主要内容:Goroutine 介绍,channel有人把Go语言比作 21 世纪的C语言,第一是因为Go语言设计简单,第二则是因为 21 世纪最重要的就是并发程序设计,而 Go 从语言层面就支持并发。同时实现了自动垃圾回收机制。 Go语言的并发机制运用起来非常简便,在启动并发的方式上直接添加了语言级的关键字就可以实现,和其他编程语言相比更加轻量。 下面来介绍几个概念: 进程/线程 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个