1. 什么是 Context
一个任务会有很多个 goroutine
协作完成,一次 HTTP 请求也会触发很多个 goroutine
的启动,而这些 goroutine
有可能会启动更多的子 goroutine
,并且无法预知有多少层 goroutine
、每一层有多少个 goroutine
。
如果因为某些原因导致任务终止了,HTTP 请求取消了,那么它们启动的 goroutine
怎么办?该如何取消呢?因为取消这些 goroutine
可以节约内存,提升性能,同时避免不可预料的 Bug。
Context
就是用来简化解决这些问题的,并且是并发安全的。Context
是一个接口,它具备手动、定时、超时发出取消信号、传值等功能,主要用于控制多个 goroutine
之间的协作,尤其是取消操作。一旦取消指令下达,那么被 Context
跟踪的这些 goroutine
都会收到取消信号,就可以做清理和退出操作。
Goroutine
的应用更多的需要配合 context