是Java';s fork和join线程池是否适合执行IO绑定的任务?

是Java';s fork和join线程池是否适合执行IO绑定的任务?,java,fork-join,Java,Fork Join,在我的应用程序中,我必须通过执行多个网络io绑定任务和一个io绑定任务来解决一个问题,并将其划分为更小的io绑定任务。这些任务目前正在使用Java的标准线程池机制执行。我想知道我是否可以转移到fork和join框架?但问题是,forkandjoin框架通常用于解决io绑定操作还是CPU绑定操作?我假设它们主要用于CPU限制的操作,因为fork-and-join框架使用工作窃取技术来利用多核处理器,但如果我将其用于IO限制的任务,会有任何负面影响吗?如果您试图解决问题的“I/O限制”方面,我怀疑从

在我的应用程序中,我必须通过执行多个网络io绑定任务和一个io绑定任务来解决一个问题,并将其划分为更小的io绑定任务。这些任务目前正在使用Java的标准线程池机制执行。我想知道我是否可以转移到fork和join框架?但问题是,forkandjoin框架通常用于解决io绑定操作还是CPU绑定操作?我假设它们主要用于CPU限制的操作,因为fork-and-join框架使用工作窃取技术来利用多核处理器,但如果我将其用于IO限制的任务,会有任何负面影响吗?

如果您试图解决问题的“I/O限制”方面,我怀疑从标准线程切换到fork和join是否会改善事情。。。假设您已经正确地实现了当前基于线程的解决方案。(根据亚历克斯·米勒(Alex Miller)的回答,这种转变实际上可能会让事情变得更糟。)


或者换句话说,使I/O绑定应用程序运行得更快的方法是解决使其I/O绑定的问题。。。或者增加系统的I/O带宽。

Fork-join是为计算绑定的任务设计的,所以通常我会说不。Fork-join确实有一个API(API)来告诉FJ框架线程将阻塞一段时间,而不是排队执行新任务,但它确实是为短等待(如获得锁)而设计的,没有任意长时间等待IO


我们有一个使用fork-join的系统,我们将绑定IO的任务分流到一个单独的执行器池。当数据到达时,它会将任务触发到fork-join池中,因此那里只会发生cpu限制的工作。

在这种情况下,fork-join似乎没有什么明显的优势


这似乎也没有什么明显的缺点,因为您不会太努力地使用某些资源


总而言之,我会一直使用线程池,直到您没有其他重要的开发要做。

“好”的标准是什么?什么类型的I/O?网络?磁盘?安慰桂?fork和join真的是一个“线程池”吗?它是一个绑定到网络io的任务。