上QQ阅读APP看书,第一时间看更新
8.3.1 应用场景
下面先来介绍在http请求中context的作用。每一个http请求的request都会启动一个goroutine处理这个请求,后续跟进这个请求可能还需要访问数据库、做安全验证、访问控制、日志记录等,这时候会由最早的那个goroutine启动后续的多个goroutine,这样就会有多个goroutine处理一个request。而context的作用就是在这几个不同的goroutine之间同步特定数据、取消信号以及处理请求的截止日期,如图8-5所示。
context最常规的做法就是从goroutine开始,一层层地把信息传递到最下层。如果没有context,就可能发生如图8-6所示的情况。在图8-6中,最上层的已经因为报错而结束,但是下层的goroutine却还在继续。
如果有了context,当上层goroutine发生错误而结束时,可以很快地同步信息到其下层的goroutine,这样可以及时停止下层goroutine,避免无谓的系统消耗,如图8-7所示。
上面介绍的就是context的最大作用,理解了它,接下来就更容易理解context的设计了。