# ForkJoin ?
ここで言う ForkJoin とは、非同期タスクを以下のように処理するシステム:
- CPU コア数以下のスレッドを持ち
- スレッドごとのタスクキューを持ち
- work stealing する
具体的には [ForkJoinPool (JVM)](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html) とか。
標準機能・ライブラリに ForkJoin 相当がない言語でも、
本稿の考え方自体は適用できることがあるだろう。
( 例えば node.js のようなイベントドリブンでも近い話はあるので )
# TL;DR
一時期の流行の影響があり騙されてしまうケースがあるが...
- ForkJoin、オメーは駄目だ (ほとんどの web アプリ用途では)
- 大抵の web アプリ用途では長所が活きない
- スレッド数が足りない
- `fairness` がないので、レイテンシの最悪値が青天井
- web アプリの並列処理では普通のスレッドプール + キューキングがベターなことが多い
- CPU コア数に関係なく単一のキューを使うのがポイント
※ web アプリ用途: 画面・API のレスポンスを返すまでの処理の中で並列処理をする用途の意
なお、CPU・メモリアクセス律速かつバッチ処理などでは ForkJoin 方式は有用 (例えば AI のミニバッチとか向いてそう、たぶん)。