go - 并发模式:具有可变数量结果的工作人员
问题描述
我想在 golang 中创建一个工作池,将一个大任务划分为多个工作。
问题是例程可能会产生多个输出作为计算的结果,所以我无法提前知道我将在结果通道上迭代多少次。
我知道我可以使用 WaitGroup,但我想知道是否可以使用另一种模式,以便让主线程在计算上前进并迭代结果,而不是先等待每个例程完成。
我认为对我来说不是很优雅的另一个解决方案是创建一个Result
结构或返回一个结果数组。因为我可以数出作品的数量,所以我知道我会收到多少个结果数组。
解决方案
你可以这样做:
go func() {
wg.Wait()
close(results)
}()
for res := range results {
// Handle results
}
当所有工作人员完成处理后,关闭结果通道。读取结果的过程将完成,然后退出循环。
推荐阅读
- sbt - build.sbt 如何解析为 AWS codeartifact repo?
- stata - 基于现有字符串变量生成字符串变量
- html - 如何仅使用嵌入脚本构建在另一个应用程序中显示的 Web 应用程序
- microsoft-graph-api - Microsoft Graph API 邮件中附件的 3 MB 限制是累积的吗?
- python - 得到“警告:找不到输入匹配:加载目标 b”,所有文件都在同一目录中
- excel - 索引并匹配多行多列 - 返回下面的单元格
- debugging - 如何调试小部件 Xcode 12
- javascript - 用onclick JS函数插入表格
- python - 有没有办法让这个代码每分钟可靠地更新一个不和谐的频道?
- javascript - Javascript合并令牌对象数组,同时保留文本结构