Это ортогональные понятия, поэтому вы не видите их упомянутыми в одних и тех же ответах.
Целью AsyncHttpClient
является (среди прочего) использование одиночного потока для всех сетевых коммуникаций (выполняется Netty через NIO Java неблокирующим асинхронным способом) вместо традиционной модели потока на запрос. Поверх единственного потока сетевого уровня библиотека имеет рабочие потоки, которые выполняют прикладной уровень асинхронной обработки, видимой для пользователей AsyncHttpClient
, что означает, что она уже имеет (небольшой) внутренний пул потоков.
ForkJoinPool
стремится максимизировать использование ЦП, имея много потоков (по умолчанию общий пул имеет CPU cores - 1
, у тех, которые вы создаете, может быть больше / меньше) и путем кражи работы, так что потоки не простаивают, и это наиболее эффективно с небольшими рекурсивными задачами.
Ссылка обсуждает, что кража работы также эффективна с нерекурсивными задачами. Слово «асин c» отбросило вас туда, но оно просто относится к обычной задаче, которую вы отправляете в пул, и завершается асинхронно.
Так что вы можете либо сделать поток-на-запрос (например, Basi c I / O или «старый I / O») с пулом потоков, или , вы можете использовать однопоточный неблокирующий NIO (т.е. New I / O O) без пула потоков.
Объединять их не имеет смысла. Вы бы перешли с модели потока на запрос к неблокирующей модели для повышения производительности.