JSP Tomcat, кажется, работают последовательно (а не параллельно) - что мне не хватает? - PullRequest
3 голосов
/ 03 февраля 2012

У меня есть следующий простой JSP, работающий в Tomcat 7. Больше ничего в контейнере и нет web.xml. Я нажал на ссылку http://localhost:8090/test/test.jsp три раза подряд в браузере на трех отдельных вкладках (Chrome).

<%@ page import="java.util.Date" %>
<%
    out.println("Hello there dude");
    System.out.println("Hello there my friend "+ new Date() +"
                "+Thread.currentThread().getName());
    try {
        Thread.sleep(5000);
    } catch(Exception e)
    {
        e.printStackTrace();
    } 
%>

`

Когда я запускаю его в Tomcat 7 или в любой другой версии Tomcat, сервлет JSP блокирует несколько запросов, и я получаю вывод, подобный этому, в консоли.

Здравствуйте, мой друг Чт 02 февраля 19:31:35 MST 2012 http-bio-8090-exec-1
Здравствуйте, мой друг Чт 02 февраля 19:31:40 MST 2012 http-bio-8090-exec-3
Здравствуйте, мой друг Чт 02 февраля 19:31:45 MST 2012 http-bio-8090-exec-4

Если вы посмотрите на время, вы увидите, что сервлеты JSP выполняются последовательно. Я запустил их все одновременно, поэтому я считаю, что они должны завершиться в течение секунды, но последующие запросы не начнутся, пока не завершится предыдущий запрос. Это время запуска выше, и браузер будет зависать при последнем запросе в течение 15 секунд. Запросы JSP должны выполняться параллельно, если я понимаю спецификацию, поскольку я не запрашиваю однопоточное поведение.

Интересно, что Tomcat выделяет разные потоки, как показано выше, но они определенно выполняются последовательно. Это похоже на то, что контейнер не выпустит новый поток сервлета JSP для обработки, пока не завершится исходящий запрос. Мы запускаем веб-сервисы весь день, и они, похоже, работают параллельно, просто отлично.

Я работаю на многоядерной Windows-системе и по умолчанию в конфигурации Tomcat, в которой доступно 200 потоков.

1 Ответ

3 голосов
/ 03 февраля 2012

Вероятно, это на самом деле случай, когда браузер блокирует запросы, а не потоки Tomcat.Я только что попробовал один и тот же код на моей установке Tomcat 7, и три раза подряд быстро запустил wget localhost:8060/ThreadTest/ &, и все три завершили в течение 1 секунды.

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