Как распределяются потоки для обработки запроса сервлета? - PullRequest
49 голосов
/ 17 сентября 2011

Может кто-нибудь объяснить, что такое поток на запрос и поток на соединение?На какой модели работают сервлеты?Как распределяются потоки для обработки HTTP-запросов?Это поток / запрос или соединение?

И скажем, если я хочу выполнить трудоемкую задачу в моем Servlet doGet() методе асинхронно, я запускаю новый поток с использованием исполнителей Java, чтобывычисления выполняются в отдельном потоке, и ответ отправляется сразу.

Теперь это гарантирует, что я освободил поток, который обрабатывал мой HttpServletRequest, или он все еще используется, потому что дочерний поток все ещеработает?

1 Ответ

55 голосов
/ 17 сентября 2011

За запрос означает, что при выполнении HTTP-запроса поток создается или извлекается из пула для его обслуживания. Один поток обслуживает весь запрос. Поток на соединение был бы тем же самым, за исключением того, что поток используется для всего соединения, которое может быть несколькими запросами и также может иметь много мертвого времени между запросами. Контейнеры сервлетов являются нитками по запросу. Могут быть некоторые реализации, которые предлагают поток для соединения, но я не знаю, и кажется, что это было бы очень расточительно.

Создание потока внутри другого потока не устанавливает никаких особых отношений, и в большинстве случаев весь смысл в том, чтобы один поток выполнял больше работы или завершал работу, пока другой поток продолжает работать. В вашем сценарии использование другого потока для выполнения работы, требуемой запросом, как вы ожидаете, позволит немедленно отправить ответ. Поток, использованный для обслуживания этого запроса, также будет немедленно доступен для другого запроса, независимо от того, сколько времени занимает выполнение другого потока. Это в значительной степени способ выполнения асинхронной работы в контейнере сервлета поток-на-запрос.

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

...