Добрый день. Может немного глупый вопрос, но все же задам. Допустим, есть стандартная конфигурация Spring MVC приложения (как из примеров в интернете) с одним DispatcherServlet:
<web-app>
<display-name>My application</display-name>
<servlet>
<servlet-name>web</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>web</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
За ним есть один @Controller, и один @Service , в котором производится некая работа, которая занимает, допустим, 2 секунды. Как будет вести себя приложение, если одновременно к нему придет 10 одинаковых запросов? Все запросы будут обрабатываться последовательно? Или для каждого запроса будет создан отдельный экземпляр DispatcherServlet и контекст бинов? Спасибо.
Web-контейнер имеет пул потоков для обработки запросов. На каждый запрос из пула берётся поток и в нём запускается метод контроллера. По умолчанию все последующие вызовы из этого метода будут выполняться в том же потоке. Если запросов поступает больше, чем есть потоков в пуле, запросы встают в очередь и ждут освобождения одного из потоков. Для пользователя это выглядит как медленно отвечающий сайт. Если очередь переполняется, клиенты начинают получать ошибку 502. Поэтому тяжёлые задачи стоит запускать в отдельном пуле потоков или вовсе переложить на фоновый процесс. Первое в Spring очень легко делается - достаточно пометить тяжёлый метод аннотацияей @Async. А DispatcherServlet и контекст создаётся единожды - при запуске web-приложения, обычно в момент запуска сервера.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей