Что происходит, когда одна программа имеет несколько ThreadPoolExecutor? - PullRequest
0 голосов
/ 29 февраля 2020

A ThreadPoolExecutor экземпляр управляет потоками: он отвечает за сопоставление задач в своей очереди с заданным количеством потоков.

Учитывая, что потоки являются общими ресурсами, интуитивно они должны управляться «одним» менеджер "на приложение.

Однако, существуют" лучшие практики ", которые говорят вам создать несколько исполнителей для некоторого сценария. Например, существуют убеждения, что вам следует создать двух отдельных исполнителей, одного для задач, связанных с процессором, и другого для блокировки задач ввода-вывода.

Почему это так?

Интуитивно, с несколькими «менеджерами» управление одним и тем же набором потоков без знания о существовании друг друга звучит для меня как анти-паттерн.

Знает ли JVM о существовании нескольких исполнителей и осуществляет дополнительное управление, чтобы они никогда не боролись за та же тема?

1 Ответ

2 голосов
/ 29 февраля 2020

Я действительно рекомендую вам взглянуть на книгу "Java параллелизм на практике".

Несколько цитат из главы 8:

Пулы потоков работают лучше всего, когда задачи однородны и независимы. Смешивание долгосрочных и краткосрочных задач может привести к «засорению» пула, если он не очень большой; отправка задач, зависящих от других задач, может привести к взаимоблокировке, если пул не ограничен.

...

Пулы потоков могут иметь проблемы с отзывчивостью, если задачи могут блокироваться в течение длительных периодов времени. время, даже если тупик не возможен. Пул потоков может быть забит долгосрочными задачами, что увеличивает время обслуживания даже для коротких задач. Если размер пула слишком мал по отношению к ожидаемому стационарному количеству выполняемых задач, в конечном итоге все потоки пула будут выполнять долго выполняющиеся задачи, и пострадает скорость отклика.

При разделении долго выполняющегося ввода-вывода задачи и быстрые задачи ЦП в двух разных пулах потоков, вы можете решить эту проблему. Пулы потоков не будут бороться за один и тот же поток, потому что они не разделяют никакие потоки.

...