功能请求: Daemon/Sidekick 池
作者: sbstp创建于 2024年9月6日更新于 2025年5月23日
我有一个这样的模式,其中有一个主 goroutine,由一些辅助 goroutine 来支持。主 goroutine 生成一个值,而辅助 goroutine 不会生成任何值来捕获,而是执行一些维护或实用函数。一旦主 goroutine 退出,辅助 goroutine 的上下文应被取消。如果辅助 goroutine 以错误或异常的方式退出,主 goroutine 和其他辅助 goroutine 应被取消。我使用这种模式的一个例子是在 gRPC 服务器-流处理器中。我定期发送保持活动消息,以保持连接保持活动,同时主 goroutine 正在等待事件发生。一旦主 goroutine 完成,我希望明确地杀死保持活动例程。命名很难,目前我称之为守护程序/助手模式,类似于 Python 中的守护线程。它还有一些类似 Kubernetes 中的侧车 Pod 的特点。我在这里提供了这个模式的基本实现 https://GitHub.com/sbstp/unison/blob/master/sidekick.go,但它有点原始,并且无法清晰地打印异常。目前,Pool.Wait 等待所有例程完成,如果能够只等待第一个例程完成并取消其他例程,这个模式就可以轻松实现。是否有兴趣添加对这个模式的支持呢?
内容来源: sourcegraph/conc