给定 Go 中(部分)填充的缓冲通道
ch := make(chan *MassiveStruct, n)
for i := 0; i < n; i++ {
ch <- NewMassiveStruct()
}
是否建议在关闭通道时(由作者)也排空通道,以防读者何时从中读取(例如,数量有限并且他们目前正忙)?那是
close(ch)
for range ch {}
如果通道上还有其他并发阅读器,这样的循环是否保证结束?
上下文:具有固定数量工作器的队列服务,当服务关闭时,它应该停止处理任何排队的东西(但不一定在之后被 GC 处理)。所以我要向工作人员表明服务正在终止。我可以立即排空剩余的“队列”,让 GC 释放分配的资源,我可以读取和忽略工作程序中的值,我可以离开通道,因为读取器正在运行,并将通道设置为 nil 在写入器中GC 清理一切。我不确定哪种方式最干净。
FFIVE
噜噜哒
动漫人物
相关分类