英文:
Should I reuse context.Background() in go?
问题
假设我有100个goroutine,它们使用context.WithDeadline(emptyCtx, ...)
发送gRPC请求。
我是否有理由在所有子上下文中使用相同的全局'emptyCtx'呢?
context.WithDeadline(emptyCtx, ...)
,
或者如果我只使用context.WithDeadline(context.Background(), ...)
,是否可以?
我特别关注内存方面的问题(调查内存泄漏)。
英文:
Lets say I have 100 go routines that send gRPC request using context.WithDeadline(emptyCtx, ...)
Is there a reason for me to use the same global 'emptyCtx' for all child contexts?
context.WithDeadline(emptyCtx, ...)
or is it ok if I just use context.WithDeadline(context.Background(), ...)
I'm looking specifically memory-wise (investigate a memory leak)
答案1
得分: 1
如果多次调用context.Background
,并没有什么本质上的坏处。在1.18版本中,它每次都返回相同的单个值,而且未来也没有太大的改变的理由。
在代码审查中,我仍然会对此提出疑问,但只是为了以后添加全局截止时间或值时不会变得麻烦。在实践中,将上下文参数放在适当的位置是一个好习惯。
英文:
Nothing inherently bad happens if you call context.Background
several times. In 1.18 it returns the same single value every time, and there is little reason why that would change in the future.
In a code review, I would still question it, but only so it doesn't become a pain to add global deadlines or values later. It's just good practice to have context arguments in place.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论