2
Tomcat 7에서 실행되는 다음과 같은 간단한 JSP가 있습니다. 컨테이너에없고 web.xml도 없습니다. 나는 나의 브라우저에서 3 개의 분리 된 탭 (크롬)으로 URL을 http://localhost:8090/test/test.jsp
번 연속으로 세 번 연속 누른다.Tomcat JSP가 병렬로 실행되는 대신 순차적으로 실행되는 것처럼 보입니다. 무엇이 누락 되었습니까?
`
<%@ 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();
}
%>
내가 톰캣 7 톰캣의 다른 버전에서 실행할 때, JSP 서블릿 여러 요청을 차단하고 내가 콘솔에서 다음과 같은 출력을 얻을.
안녕 내 친구 목 2월 2일 산악 표준시 19시 31분 35초 2012 HTTP 바이오-8090-간부-1
안녕 내 친구 목 2월 2일 산악 표준시 19시 31분 40초 2012 HTTP 바이오-8090 이 간부-3
안녕 내 친구 목 2월 2일 산악 표준시 19시 31분 45초 2012 HTTP 바이오-8090-간부-4
당신이 시간을 살펴보면, 당신은 JSP 서블릿이 순차적으로 실행되어 표시됩니다. 나는 그것들을 모두 동시에 시작했기 때문에, 그들은 서로의 두 번째 시간 내에 끝내야한다고 믿지만, 이전 요청이 완료 될 때까지 후속 요청은 시작되지 않습니다. 위의 시작 시간이며 브라우저는 마지막 요청시 15 초 동안 중단됩니다. 단일 스레드 동작을 요구하지 않을 때 스펙을 이해하면 JSP 요청이 병렬로 실행되어야합니다.
흥미롭게도 Tomcat은 위에 표시된 것처럼 서로 다른 스레드를 할당하지만 실제로는 순차적으로 실행됩니다. 진행중인 요청이 완료 될 때까지 컨테이너가 새 JSP 서블릿 스레드를 릴리스하지 않을 것입니다. 우리는 하루 종일 Webservices를 실행하고 그들은 잘 병렬로 실행하는 것 같습니다.
저는 멀티 코어 Windows 상자에서 실행 중이며 사용 가능한 200 개의 스레드가있는 기본 Tomcat 구성을 사용하고 있습니다.
일부 브라우저 (Chrome 및 Firefox를 테스트 한 적이 있음)에서 여러 탭에 대한 요청이 동일한 http 포트 요청을 사용하고 브라우저가 여러 요청을 보낼 수 없도록 차단되었습니다. 아이러니하게도, 나는 3 이하의 탭에 대해 ie9에서 이것을 보지 못했습니다. 따라서 브라우저가 사용자의 요청을 차단할 수 있으므로 결과가 실제로 클라이언트 인 경우 오류가있는 서버 동작을 믿을 수 있습니다. –
가능한 [servlet multithreading] 중복 (http://stackoverflow.com/questions/7681291)/servlet-multithreading) 및 [Java Servlet 동시 요청] (http://stackoverflow.com/questions/8011138/java-servlet-concurrent-request) – BalusC