gpt4 book ai didi

go - 理解上下文的 "lifespan"

转载 作者:行者123 更新时间:2023-12-01 22:37:21 25 4
gpt4 key购买 nike

我在理解上下文的“生命周期”时遇到了一些麻烦。

我正在接收 RPC 请求,并使用 context.WithValue 存储请求 ID以便它可以用于记录。在我的服务中,上下文没有截止日期或超时。

RPC调用的方法之一是从数据库中拉取一些数据,调用goroutine做一些处理(与客户端无关),发送响应,然后方法返回。方法返回后,goroutine 可以运行约 15 秒。

我在 goroutine 中记录了几次请求 ID,到目前为止它工作正常,但是是否存在上下文可能被垃圾收集并且在我尝试使用它时不可用的情况?还是会知道在我的 goroutine 完成之前保持上下文?

这让我想到另一个问题 - 我没有使用 context.WithCancel ,这是否意味着它将无限期地留在内存中?我想一段时间后这可能会导致一些性能问题。

最佳答案

上下文是一个美化的完成 channel 。根据上下文的来源,确定应该如何回收它:

如果您创建上下文(context.WithCancel 等),请确保在它所代表的子任务完成时回收它(defer cancelfn() 等,确保这发生在 API 返回时)。

如果您使用来自外部源的上下文(例如 gRPC 请求) - API 框架有责任关闭上下文。

只要没有事件引用(函数闭包等),go 将在 GC 期间回收任何内存

关于go - 理解上下文的 "lifespan",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59094337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com