is`boundedsourcequeue` from`source.queue`是否允许并发生产者?

6mzjoqzu  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(358)

Source.queue 最近添加了一个专门用于 OverflowStrategy.dropNew 避免了异步机制。物化的结果是 BoundedSourceQueue[T] (与 SourceQueueWithComplete[T] 在旧版本中)。这些文件 SourceQueueWithComplete 的变体 Source.queue 明确表示物化队列应该由任意数量的并发生产者使用:
具体化的sourcequeue最多可由maxconcurrentoffers并发生产者使用。
这些文件 BoundedSourceQueue 别提这事。这个限制解除了吗 BoundedSourceQueue ? 它能被任意数量的并发生产者使用吗?

zkure5ic

zkure5ic1#

从技术上讲 SourceQueueWithComplete 变体没有 maxConcurrentOffers 限制条件 OverflowStrategy.dropNew 已生效。
但是,由于向 SourceQueueWithComplete 是异步通信的,这意味着如果生产者的生产速度快于它处理未来的速度,它可能会占用内存。异步消除了反压力,除非其他机制重新引入它。
因为当战略 dropNew ,可以立即知道元素被丢弃,可以同步传递提供的结果(即阻止生产者,直到它处理/丢弃结果)。这就允许任意多个生产商没有风险。因此,如果使用 dropNew 战略 BoundedSourceQueue 建议使用版本(即仅使用 SourceQueueWithComplete 如果正在使用其他策略),则建议会随着负载的增加而变强。
是的,正在运行的线程数是对并发生产者数量的限制 BoundedSourceQueue 变体。

相关问题