Java 异步处理J2EE

Java 异步处理J2EE,java,multithreading,servlets,jakarta-ee,asynchronous,Java,Multithreading,Servlets,Jakarta Ee,Asynchronous,Servlet3.0引入了异步处理的概念。所以所有的书都说这消除了每个请求一个线程的要求。我已经测试过了,是的,它确实有效。现在,我有一个简单的servlet,用户在其中以同步模式启动HTTP请求。线程只是休眠1秒,然后回复客户端。当我在这种模式下进行负载测试时,服务器每秒只能处理4个请求。 现在,我将同步模式更改为异步模式,并根据请求创建一个新线程,将原始http线程释放回池中。同样,新线程启动后会休眠1秒并回复。然而,这种模式的扩展性非常好,它每秒处理数百个请求 现在,问题是,所有的书籍和文

Servlet3.0引入了异步处理的概念。所以所有的书都说这消除了每个请求一个线程的要求。我已经测试过了,是的,它确实有效。现在,我有一个简单的servlet,用户在其中以同步模式启动HTTP请求。线程只是休眠1秒,然后回复客户端。当我在这种模式下进行负载测试时,服务器每秒只能处理4个请求。 现在,我将同步模式更改为异步模式,并根据请求创建一个新线程,将原始http线程释放回池中。同样,新线程启动后会休眠1秒并回复。然而,这种模式的扩展性非常好,它每秒处理数百个请求


现在,问题是,所有的书籍和文章都说服务器的资源数量有限,所以每个请求保留一个线程是不好的。在这两种情况下,我每个请求有一个线程,主要区别在于第一个是http线程,第二个是我的自定义线程。现在的问题是,除了我的自定义线程之外,HTTP线程还有什么特别之处吗?毕竟,在这两种情况下,每个请求都有一个线程,为什么第一个线程执行得不好,而第二个线程执行得不好?我查阅了许多文件、书籍,但没有一本能解释这些棘手的细节。你能给我提个建议吗?谢谢,HTTP线程和异步线程之间没有区别

您可以看到,性能升级是因为HTTP线程(大部分)被实现为一个固定的N大小的线程池;这意味着至少N个服务器请求将被并发处理。。。任何其他请求都将被阻止(或拒绝),直到一个或多个线程空闲

在异步模式下,这N个线程被很快地使用和释放,因为繁重的工作(创建响应对象)正在另一个线程中完成;允许您继续接收更多点击请求


根据您如何实现后台线程,您将看到性能升级。例如,如果您还将线程实现为一个固定的M大小池,其中M大于N,则在处理过程中会看到
M-N
请求的增量。

AFAIK,HTTP线程和异步线程之间没有区别

您可以看到,性能升级是因为HTTP线程(大部分)被实现为一个固定的N大小的线程池;这意味着至少N个服务器请求将被并发处理。。。任何其他请求都将被阻止(或拒绝),直到一个或多个线程空闲

在异步模式下,这N个线程被很快地使用和释放,因为繁重的工作(创建响应对象)正在另一个线程中完成;允许您继续接收更多点击请求

根据您如何实现后台线程,您将看到性能升级。例如,如果您还将线程实现为一个固定的M大小池,其中M大于N,那么在处理过程中会看到
M-N
请求的增量