gpt4 book ai didi

multithreading - Tomcat JSP 似乎是串行运行(而不是并行运行)——我错过了什么?

转载 作者:行者123 更新时间:2023-11-28 21:52:00 24 4
gpt4 key购买 nike

我在 Tomcat 7 中运行了以下简单的 JSP。容器中没有其他内容,也没有 web.xml。我在浏览器中的三个单独的选项卡 (Chrome) 中快速连续点击了 url http://localhost:8090/test/test.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();
}
%>

`

当我在 Tomcat 7 或任何其他版本的 Tomcat 中运行它时,JSP servlet 将阻止多个请求,并且我在控制台中得到这样的输出。

你好我的 friend Thu Feb 02 19:31:35 MST 2012 http-bio-8090-exec-1
你好我的 friend Thu Feb 02 19:31:40 MST 2012 http-bio-8090-exec-3
你好我的 friend Thu Feb 02 19:31:45 MST 2012 http-bio-8090-exec-4

如果检查时间,您会看到 JSP servlet 正在连续执行。我同时启动了它们,所以我相信它们应该在一秒内完成,但后续请求要等到前一个请求完成后才会开始。这些是上面的开始时间,浏览器将在最后一个请求上挂起 15 秒。如果我理解规范,JSP 请求应该并行执行,因为我不要求单线程行为。

有趣的是,Tomcat 正在分配不同的线程,如上所示,但它们肯定是串行执行的。这就像容器不会释放新的 JSP servlet 线程来处理,直到处理的请求完成。我们整天都在运行 Web 服务,它们似乎可以并行执行。

我在一个多核 Windows 机器和默认开箱即用的 Tomcat 配置上运行,它有 200 个可用线程。

最佳答案

这似乎确实是浏览器阻塞请求的情况,而不是 Tomcat 阻塞线程的情况。我刚刚在我的 Tomcat 7 安装上尝试了相同的代码,并快速连续运行了三次 wget localhost:8060/ThreadTest/&,并且所有三个都在 1 秒内完成。

关于multithreading - Tomcat JSP 似乎是串行运行(而不是并行运行)——我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com