我一直在学习Java 8的并行流,通过谷歌搜索我找到了这篇文章。但是我无法理解文章中的这句话:
我不明白一个长时间运行的任务如何会阻塞池中的所有其他线程。...所有的并行流都使用共同的fork-join线程池,如果您提交了一个长时间运行的任务,您将有效地阻塞池中的所有线程。
我不明白一个长时间运行的任务如何会阻塞池中的所有其他线程。...所有的并行流都使用共同的fork-join线程池,如果您提交了一个长时间运行的任务,您将有效地阻塞池中的所有线程。
提交一个任务不能使用公共池中的所有线程。公共池大小为核心数-1
(主线程减1)。
我认为在文章中,他的意思是在API中无法将IO密集型任务和CPU密集型任务分别分配到不同的池中。
例如,在8核机器上,如果您将8个CPU密集型任务提交到池中,然后再提交8个IO密集型任务,则IO任务必须等待CPU密集型任务完成(反之亦然)。如果您可以将它们提交到不同的池中,则所有16个操作都可以并发运行,因为IO操作对CPU的成本不高。