面试题答案
一键面试WithCancel
- 资源消耗:当调用 cancel 函数时,会释放相关的资源,在正常使用场景下,只要及时调用 cancel 函数,资源消耗不会无限制增长。
- 响应速度:取消操作相对直接,调用 cancel 函数后,相关的 goroutine 能较快收到取消信号,响应速度快。
WithDeadline
- 资源消耗:在到达截止时间前,如果没有手动取消,资源会一直占用。一旦到达截止时间,会触发取消操作并释放资源。
- 响应速度:截止时间到达时,取消操作会立即执行,响应速度取决于系统时钟精度,通常能快速响应。
WithTimeout
- 资源消耗:本质上是基于 WithDeadline 实现的,设置了一个相对的超时时间。在超时前资源持续占用,超时后释放。
- 响应速度:与 WithDeadline 类似,超时时间一到就触发取消,响应速度较快且依赖系统时钟精度。
WithValue
- 资源消耗:主要用于在 Context 中传递数据,本身并不直接涉及资源释放或占用的性能问题,但传递大量数据可能增加内存消耗。
- 响应速度:不涉及取消相关的响应速度问题,主要影响是传递数据时的性能,如数据序列化、反序列化(如果涉及)等操作的开销。
总体而言,WithCancel 手动控制灵活,响应快;WithDeadline 和 WithTimeout 自动控制,依赖时钟精度;WithValue 专注数据传递,内存消耗可能有影响。