Java Web Server - Параллельные рабочие проектируют VS сборочные линии для пошаговых операций ввода-вывода - PullRequest
0 голосов
/ 21 мая 2018

Я пишу интерфейс Java-сервера, который содержит несколько шагов http-запросов один за другим, каждый из которых занимает около 10 мс, и окончательный результат не будет возвращен клиенту.Метод выглядит следующим образом:

public void printUserBookList(int userId){
  var user = userService.getUser(userId); // http req taking 10 ms to finish
  var bookShelf = bookShelfService.getShelf(user); // http req taking 10 ms to finish
  var books = bookService.getBooks(bookShelf); // http req taking 10 ms to finish
  printService.print(books); // http req taking 10 ms to finish
}

Для какой пропускной способности и производительности какую модель параллелизма мне следует использовать?

  1. дизайн параллельных рабочих (Все шаги выполняются синхронноодин за другим)

При поступлении входящего запроса сервер Tomcat автоматически назначает задачу потоку (если это возможно).Само задание выполняется синхронно.Например, если есть всего 4 шага, каждый из которых занимает 10 мсек, чтобы завершить, тогда это займет 40 мсек, чтобы завершить эту задачу, и тогда рабочий поток будет освобожден для принятия другой задачи.Этот проект требует больше времени для каждого работника, чтобы закончить свою задачу.

проектирование сборочной линии (Все шаги выполняются асинхронно по одному)

Шаги в задаче будут обрабатываться разными участниками.Каждый актер имеет свой собственный пул вспомогательных потоков.Все шаги внутри задачи выполняются асинхронно, поэтому каждый работник высшего уровня может выполнить свою задачу мгновенно после ее получения.Но этот дизайн требует больше ThreadPoolExecutors на каждом шаге

Дизайн в стиле актера:

public void printUserBookList(int userId){
  userActor.getUserAndThenGoNextStepAsync(userId);
  // inside getUserAndThenGoNextStepAsync, IO operations are executed by another threadPoolExecutor
  // and the result will be passed to the successors for further async executions
}

Для обычного сервера Tomcat какой дизайн может обещать лучшую пропускную способность и производительность?И будет ли полностью асинхронный дизайн лучше использовать процессор?

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