Java runAsync и ForkJoin, когда vCPU равен 2

У меня есть приложение для загрузки с тяжелой загрузкой, которое работает на экземпляре AWS t3.large EC2 с двумя виртуальными процессорами.

У меня есть два этапа расчета, и на первом этапе я намерен использовать supplyAsync с пулом потоков из 2 потоков из-за 2vcpus.

Второй шаг включает в себя разветвленное соединение (происходит после завершения шага 1). Однако при этом, если я использую commonPool, который я могу, потому что он выполняет только вычисления, это будет означать, что он работает с parallelism = 1. Это означает, что JVM создаст поток для каждой задачи (ссылка: https://dzone.com/articles/be-aware-of-forkjoinpoolcommonpool). Я ожидаю, что количество подзадач будет больше 10. Поэтому создание 10 или более потоков кажется излишним из-за потребляемой памяти.

Имеет ли смысл использовать подход fork join, если у меня всего 2 виртуальных процессора?


person maheeka    schedule 29.05.2021    source источник
comment
Просто создайте пул ForkJoin с вашим собственным ThreadPool, имеющим # потоков ЦП.   -  person oneat    schedule 01.06.2021
comment
вы можете прочитать это. параллелизм вполне может быть не 1. Поэтому создание 10 или более потоков кажется излишним из-за потребляемой памяти - по крайней мере, это тоже немного неправильно. стеки потоков заполняются ленивым образом и обычно довольно малы. В целом, я нахожу ваш вопрос непонятным.   -  person Eugene    schedule 01.06.2021
comment
Любопытно, когда вы говорите ... кажется излишним из-за потребляемой памяти. Вы имеете в виду память, которую мог бы использовать дополнительный поток? Или вы предполагаете, что сама подзадача велика, и поэтому ожидаете, что она потребляет много памяти в процессе вычисления своего результата?   -  person Atmas    schedule 01.06.2021
comment
было бы очень полезно, если бы вы вернулись с некоторыми ответами на комментарии, иначе я сомневаюсь, что кто-то сможет вам помочь   -  person Eugene    schedule 03.06.2021