Java - что хорошего в Executors? - PullRequest
       1

Java - что хорошего в Executors?

3 голосов
/ 11 августа 2010

В жизни без Java Executors новые потоки должны создаваться для каждой выполняемой задачи.Создание новых потоков требует накладных расходов на потоки (создание и удаление), что добавляет сложность и тратит время на программу, не являющуюся исполнителем.

Ссылка на код:

нет Java Executor -

new Thread (aRunnableObject).start ();

с Java Executor -

Executor executor = some Executor factory method;
exector.execute (aRunnable);

Суть в том, что исполнители абстрагируют низкоуровневые детали управления потоками.

Это правда?

Спасибо.

Ответы [ 3 ]

11 голосов
/ 11 августа 2010

Суть в том, что исполнители абстрагируют низкоуровневые детали управления потоками.Это правда?

Да.

Они имеют дело с такими проблемами, как создание объектов потока, поддержание пула потоков, контроль количества запущенных потоков и изящный / меньшеэто изящное отключение.Делать эти вещи вручную нетривиально.

РЕДАКТИРОВАТЬ

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

  1. ваша пользовательская реализация не будет идеально настроена, а
  2. производительность разница в любом случае не будет значительной.

Кроме того, классы поддержки Executor позволяют просто настраивать различные параметры (например, размеры пула потоков), если есть проблема, которую необходимо устранить.Я не понимаю, насколько значительно повлияет накладные расходы на сборку мусора при использовании исполнителей, так или иначе.

Как правило, вы должны сосредоточиться на написании своих приложений просто и надежно (например, с использованием высокойподдерживать классы параллелизма) и беспокоиться о производительности, только если:

  1. ваше приложение работает "слишком медленно", а
  2. инструменты профилирования сообщают вам, что у вас есть проблемав определенной области.
1 голос
/ 11 августа 2010

Пара преимуществ исполнителей по сравнению с обычными потоками.

  1. Регулирование может быть легко достигнуто путем изменения размера ThreadPools.Это помогает контролировать / контролировать количество потоков, проходящих через ваше приложение.Особенно полезно при тестировании приложения для несущей нагрузки.
  2. Лучшее управление выполняемыми задачами может быть достигнуто с помощью RejectionHandlers.
0 голосов
/ 25 августа 2013

Я думаю, что все, что делают исполнители, - это то, что они будут выполнять задачи низкого уровня за вас, но вам все равно придется разумно решить, какой пул потоков вы хотите.Я имею в виду, что если вашему варианту использования требуется максимум 5 потоков, а вы используете пул потоков, имеющий 100 потоков, то это, безусловно, повлияет на производительность.Кроме этого, на низком уровне отмечается дополнительная работа, которая приведет к остановке системы.И наконец, всегда лучше получить представление о том, что делается на низком уровне, чтобы оно дало нам справедливое представление о подземных вещах.

...