Настройка пула потоков Fork Join

У меня простой вопрос об использовании пула потоков fork join. Вот краткий пример того, что я использую:

  executor = "fork-join-executor"
  # Configuration for the fork join pool
  fork-join-executor {
    # Min number of threads to cap factor-based parallelism number to
    parallelism-min = 24
    # Parallelism (threads) ... ceil(available processors * factor)
    parallelism-factor = 4.0
    # Max number of threads to cap factor-based parallelism number to
    parallelism-max = 48
  }

Что я не уверен, так это то, сколько потоков будет создано в этом случае? Я работаю на 2-ядерном компьютере, так что это 24 потоков на ядро ​​с максимум 48 потоков?

С коэффициентом параллелизма, установленным на 4,0, число потоков, которые могут быть запущены параллельно, будет равно 8. Так зачем же устанавливать минимальные и максимальные значения, которые в моем случае равны 24 и 48?

1 ответ

Решение

Давайте начнем с объяснения того, как параллелизм в ForkJoinPool работает. Количество потоков контролируется одним (конструктором) параметром parallelism (количество ядер по умолчанию). ForkJoinPool пытается сохранить максимум parallelism бегущие темы. Но он может решить создать больше потоков, если некоторые из них заблокированы. Например, если у вас слишком много разветвленных задач, ожидающих соединения, ваши вычисления будут заблокированы, если вы не добавите новые потоки; ожидающие потоки активны, но не работают (потому что они ждут). Больше объяснений здесь.

Конфигурация диспетчера в ваших вопросах определяет, какое значение parallelism Параметр будет установлен в. Устанавливается на доступные процессоры * parallelism-factor но хотя бы parallelism-min и самое большее parallelism-max, Смотрите больше информации здесь и здесь.

Сколько потоков будет создано в этом случае?

Параллелизм должен быть 2 cores * 4 -> 8 threads, Таким образом, количество запущенных потоков должно быть 8, но общее количество созданных потоков может быть больше.

Что нужно для установки минимальных и максимальных значений, в моем случае это 24 и 48

Я думаю, что это только в том случае, если вы развернули на машине с другим количеством ядер.

Другие вопросы по тегам