无处不在似乎在讨论从频道中读取应始终是阻止操作。态度似乎是这是Go的方式。这是有道理的,但我试图弄清楚如何从渠道中汇总信息。转到非阻止多频道接收
例如,发送http请求。假设我有一个可以产生数据流的流水线设置,所以我有一个产生队列/流点的通道。然后,我可以让一个goroutine监听这个频道,并发送一个HTTP请求将它存储在一个服务中。这有效,但我正在为每个点创建一个http请求。
我送它也端点可以让我在一个批处理发送多个数据点。我想要做的,是
- 读取尽可能多的值,直到我将阻止频道。
- 合并它们/发送单个http请求。
- 然后在信道被阻塞,直到我可以再次读取 之一。
这就是我将如何在C中完成事情,包括线程安全队列和选择语句。在可能的情况下基本上刷新整个/队列缓冲区。这是一个有效的技术吗?
看来去select语句确实给我类似C的选择的东西,但我仍然不知道,如果有一个通道上“非阻塞读”。
编辑:我也愿意接受什么,我打算可能不是去路,而是不断砸过不停的http请求也似乎我错了,特别是如果他们可以聚合。如果有人有一个很酷的替代架构,但我想避免这样的事情,例如神奇地缓冲N个物品,或等待X秒直到发送。
相关:https://blog.golang.org/go-concurrency-patterns-timing-out-and – dyoo 2014-10-07 03:06:47
虽然它不是真的超时。如果没有,我想阻止,然后在可能时读取多个。如果多个由1组成,那就很好。如果有100件事情,让我把它们全部处理掉。这样,http帖子就可以适应负载。 – 2014-10-07 03:21:51