如果有一个列表需要生成和处理(最好是在生成时),那么约定是什么?似乎回调没有被使用那么多,而渠道是普遍的最爱。为每个项目提供要调用的回调与启动 goroutine 来生成列表并同步读取和处理每个项目都没有决定性的好处。我会理解在等待列表完成时是否有多个任务需要完成,或者两者都在执行昂贵的任务并且一个人可能能够在生产下一个项目时处理最后一个项目,但那不是在这种情况下,在这里。生产者和消费者都是低成本的。
1 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
约定是使用回调。以下是标准库中的几个示例:filepath.Walk、ast.Walk。
带有生成器 goroutine 模式的通道的一个缺点是,当消费者直到通道关闭才接收时,它会泄漏一个 goroutine。另一个问题是这为数据竞争创造了机会。标准库在 Go 的早期使用了这种模式。由于这些问题,此代码在 Go 1 之前被删除。
- 1 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消