JSP Tomcat, кажется, работают последовательно (а не параллельно) - что мне не хватает?

У меня есть следующий простой JSP, работающий в Tomcat 7. Больше ничего в контейнере и нет web.xml. Я ударил URL 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 для обработки, пока не завершится исходящий запрос. Мы запускаем Webservices весь день, и они, кажется, работают параллельно просто отлично.

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

1 ответ

Решение

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

Другие вопросы по тегам