ExecutorService с использованием внутри API отдыха - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть API, который выполняет четыре задачи.Если мы делаем последовательно, этот API займет больше времени.
Чтобы повысить производительность, я использовал каркас службы Executor и представил четыре задачи с использованием сервиса executor.

Как я знаю, создание потока - дорогостоящая операция, и в executorСервисный поток будет создан во время отправки задач.И потоки будут уничтожены, когда мы вызовем метод завершения работы службы executor.

Это процесс каждого запроса в этом сценарии:

  1. вызов API
  2. create executorservice
  3. отправьте четыре будущие задачи
  4. Создайте ответ из всех возвращаемых потоков.
  5. вызовите метод обслуживания исполнителя завершения работы.
  6. верните ответ

Итак, мой вопрос заключается в создании службы исполнителя, и потоки в каждом запросе верны или нет?Или, пожалуйста, дайте мне знать альтернативное решение этого.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Нет, нецелесообразно часто прерывать и повторно создавать ExecutorService.В этом весь смысл.Создайте фиксированный пул потоков, поскольку вы уже знаете количество задач, которые вы хотите выполнять параллельно.Также отделите ваш обработчик запросов от создания ExecutorService.Обратите внимание, что вы вызываете shutdown (), то есть завершаете текущие задачи и не принимаете никаких новых задач, он не подлежит повторному использованию, он заставляет вас восстанавливать пул для каждого запроса, поэтому старайтесь не завершать пул потоков.

0 голосов
/ 26 февраля 2019

Прекрасно использовать пул потоков для распараллеливания обработки входящих запросов.Но создавать новый пул потоков при каждом вызове API неправильно.

Чтобы сделать это правильно, необходимо создать отдельный экземпляр ExecutorService и просто повторно использовать его, а также отключать его только при выключенииapplication.

Кроме того, помните о правильном определении размера, потому что, если он насыщается, он замедлит вашу задержку, а не улучшит ее.

0 голосов
/ 26 февраля 2019

Создайте синглтон из вашего ExecutorService и используйте этот же экземпляр для всех запросов.НЕ создавайте это снова и снова.Вам также следует ограничить максимальное количество потоков, которыми владеет ExecutorService, чтобы ваш REST API не взорвал ваш сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...