【发布时间】:2015-02-19 11:09:50
【问题描述】:
我发现 JVM 只使用一个线程池来并行处理流,这很困难。我们在一个大型流上设置了一个 I/O 阻塞函数,这会导致与不相关的并行流一起使用的不相关或其他快速函数的活跃度问题。
流中没有允许使用备用线程池的方法。
有没有一种简单的方法可以避免这个问题,或许可以通过某种方式指定使用哪个线程池?
【问题讨论】:
-
有一个技巧——在上面链接的问题中提出了建议——但你应该记住,流主要是一种并行化计算的机制,而不是 IO,所以你在边缘操作。我们正在研究如何将其中一些用例带入主流。
-
@BrianGoetz 听我说,请考虑对 API 进行扩展,也许是
parallel()方法的一个参数,它允许将单独的线程池用于并行流处理 - 一些计算也很重,可能会导致活力问题。虽然我看到“非常长”的时间(例如 IO)超出了设计的范围,但使用流来驱动这种使用是很自然的,恕我直言,应该有一种简单的方法来减轻这种使用的影响.对我来说,它打破了 Josh 的“最少惊讶”规则。圣诞快乐:) -
@Bohemian 听到您不是第一个提出这个建议的人可能不会感到惊讶。但是,我们有充分的理由不做出这个“显而易见”的选择,我仍然相信我们做出了正确的决定。
标签: parallel-processing java-8 threadpool java-stream