β

理解Go Context机制

蘭陵N散記 37 阅读

什么是Context

最近在公司分析gRPC源码,proto文件生成的代码,接口函数第一个参数统一是 ctx context.Context 接口,公司不少同事都不了解这样设计的出发点是什么,其实我也不了解其背后的原理。今天趁着 妮妲 台风妹子正面登陆深圳,全市停工、停课、停业,在家休息找了一些资料研究把玩一把。

Context 通常被译作 上下文 ,它是一个比较抽象的概念。在公司技术讨论时也经常会提到 上下文 。一般理解为程序单元的一个运行状态、现场、快照,而翻译中 上下 又很好地诠释了其本质,上下上下则是存在上下层的传递, 会把内容传递给 。在Go语言中,程序单元也就指的是Goroutine。

每个Goroutine在执行之前,都要先知道程序当前的执行状态,通常将这些执行状态封装在一个 Context 变量中,传递给要执行的Goroutine中。上下文则几乎已经成为传递与请求同生存周期变量的标准方法。在网络编程下,当接收到一个网络请求Request,处理Request时,我们可能需要开启不同的Goroutine来获取数据与逻辑处理,即一个请求Request,会在多个Goroutine中处理。而这些Goroutine可能需要共享Request的一些信息;同时当Request被取消或者超时的时候,所有从这个Request创建的所有Goroutine也应该被结束。

作者:蘭陵N散記
Recent content on 蘭陵N散記
原文地址:理解Go Context机制, 感谢原作者分享。

发表评论