У паралельних обчисленнях модель fork-join — це спосіб налаштування та виконання паралельних програм, таким чином, що виконання розгалужується паралельно у визначених точках програми, щоб «приєднатися» (злити) у наступній точці та відновити послідовне виконання.
Він приймає масив або об’єкт спостережуваних як вхідні дані та чекає, поки всі вони завершаться. Після того, як усі спостережувані випромінюють свої значення, `forkJoin` випромінює один масив або об’єкт, що містить останнє випущене значення з кожного спостережуваного, у тому ж порядку, що й вхідні дані.
ForkJoinPool відрізняється від інших типів ExecutorService головним чином тим, що використовує крадіжку роботи: усі потоки в пулі намагаються знайти та виконати завдання, надіслані до пулу та/або створені іншими активними завданнями (зрештою блокування очікування на роботу, якщо такої немає).
Модель. Fork-Join — це парадигма паралельних обчислень, у якій виконання коду починається послідовно, а потім розпадається (розгалужується) на паралельні потоки перед тим, як зрештою знову об’єднатися, щоб відновити послідовне виконання. Це класичний шаблон проектування, який зазвичай використовується для вирішення сценаріїв «розділяй і володарюй».
Простими словами, invoke() == fork();join(); sam fork() є асинхронним, де він розділяє завдання на дві робочі одиниці та передає один блок іншому ForkJoinTask, а кількість доступних ForkJoinTask визначається вашим ForkJoinPool. І ви викличете join()/get(), щоб дочекатися його завершення.
Фреймворк fork/join підтримує стиль паралельного програмування, який вирішує проблеми за принципом «розділяй і володарюй» у такий спосіб, як показано нижче: Розбиття завдання на підзадачі. Підзавдання можуть виконуватися паралельно на різних ядрах. Підзавдання також можуть виконуватися одночасно в різних потоках на одному ядрі.