似乎到处都在讨论从通道读取应该始终是阻塞操作。态度似乎是这就是Go的方式。这有一定道理,但我正在尝试弄清楚如何从渠道汇总内容。
比如发送http请求。假设我有一个生成数据流的管道设置,所以我有一个生成队列/点流的通道。然后我可以让一个 goroutine 监听这个通道并发送一个 HTTP 请求来将它存储在一个服务中。这有效,但我正在为每个点创建一个 http 请求。
我发送的端点也允许我批量发送多个数据点。我想做的是
读取尽可能多的值,直到我阻塞通道。
组合它们/发送单个 http 请求。
然后在频道上阻塞,直到我可以再次阅读。
这就是我在 C 中使用线程安全队列和 select 语句完成任务的方式。在可能的情况下基本上刷新整个/队列缓冲区。这是一种有效的技术吗?
似乎 go select 语句确实给了我类似于 C 的选择的东西,但我仍然不确定通道上是否有“非阻塞读取”。
编辑:我也愿意接受我想要的可能不是 Go Way,但不断粉碎不间断的 http 请求对我来说似乎也是错误的,尤其是如果它们可以聚合的话。如果有人有一个很酷的替代架构,但我想避免诸如神奇地缓冲 N 个项目或等待 X 秒直到发送之类的事情。
烙印99
相关分类