Java的fork-and-join线程池是否适合执行IO绑定任务?

Sha*_*mik 26 java fork-join

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

Ale*_*ler 28

Fork-join是为计算限制任务而设计的,所以我通常会说不.fork-join确实有一个API(ManagedBlocker api)来告诉FJ框架你的线程会暂时阻塞而不是排队新任务但它真的是为了等待很短的时间(比如获得一个锁),而不是任意长等待IO.

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