Go语言面试题:如何使用 Context 控制并发

2023年 7月 10日 25.8k 0

context的面试题还是比较多,发现context控制并发这块的面试最近出现的频率非常高,所以单独抽出来说说。

一、前言

Go在 1.7 引入了context包,目的是为了在不同的goroutine之间或跨API边界传递超时、取消信号和其他请求范围内的值。

Go 语言中,Context 包是用于传递请求范围数据、取消信号和截止时间的机制。它通常被用来处理 goroutine 之间的通信和取消。Context 包是 Go 语言内置的,它可以很方便地使用,而不需要额外的依赖。

二、并发控制

一般情况下,当一个代码运行完毕后它所在的Goroutine就自动销毁了这并不需要我们认为的去干预些什么,但是当这个程序正处于某种循环下,我们就需要某种命令来打破这个循环。

例如有一个系统监控的Goroutine 设定它每10分钟收集一次系统的数据,那这个肯定是一个无限循环的程序。也就是说只要主Goroutine没问题,电脑没当机,这个Goroutine会一直跑下去。但是我突然不想让他收集但同时我又不想退出主程序,那我该怎么办?

这种时候我们一般有两种方法,一种是channel的方式来发送停止信号。另一种就是使用context(当然接收信号并停止的操作要提前写好)

2.1 channel并发控制

package main
import ( "fmt" "time")func work(num string, stop chan bool){Loop: for { select { case

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论