2017-01-18 2 views
1

В Servlet 3.0 была введена концепция обработки async. Таким образом, все книги говорят, что устраняет требование по одному потоку в запросе. Я тестировал это, и да, это действительно работает. Теперь у меня есть простой сервлет, в котором пользователи запускают HTTP-запрос в режиме синхронизации. Поток просто спит в течение 1 секунды, а затем отвечает клиенту. Когда я тестирую нагрузку в этом режиме, сервер может обрабатывать только 4 запроса в секунду. Теперь я меняю режим синхронизации на режим асинхронизации и создаю новый поток по запросу, чтобы освободить исходный поток HTTP обратно в пул. Опять же, новый поток инициирует спать в течение 1 секунды и отвечает обратно. Однако этот режим очень хорош, он обрабатывает сотни запросов в секунду.Асинхронная обработка J2EE

Теперь, на всех книгах и в статьях говорится, что сервер имеет ограниченное количество ресурсов, поэтому сохранение одного потока за запрос не является хорошим. и т. д. В обоих сценариях у меня есть один поток для запроса, основное отличие в первом - это поток HTTP, а во втором - мой пользовательский поток. Теперь вопрос в том, есть ли что-то особенное в потоках HTTP, чем мои пользовательские потоки? В конце концов, в обоих случаях у нас есть один поток для запроса, почему первый из них плохо работает, а второй - нет? Я прошел через многие документы, книги никому не объясняют эту сложную деталь. Вы можете мне что-то сказать? Благодаря

ответ

0

AFAIK, нет никакой разницы между HTTP потоками и Asychronous Темой ...

Вы видите прирост производительности, потому что HTTP потоки (в основном) реализованы в виде фиксированного N размера пула потоков; что, наконец, N запросов сервера будут обрабатываться одновременно ... любые другие запросы будут блокировать (или отклонять), пока один или несколько потоков не станут бесплатными.

В асинхронном режиме эти потоки N используются и освобождаются очень быстро, потому что сложная работа (создание объекта ответа) выполняется в другом потоке; позволяя вам продолжать получать больше запросов на запросы.

В зависимости от того, как вы реализуете потоки фона, вы увидите обновление производительности. Например, если вы также реализуете свои потоки как фиксированный пул M-размера, где M больше N, вы увидите приращение M - N запросов при обработке.

Смежные вопросы