【发布时间】:2017-06-03 06:03:07
【问题描述】:
在 Servlet 3.0 中引入了异步处理的概念。所以所有的书都说这消除了每个请求一个线程的要求。我已经测试过了,是的,它确实有效。现在,我有一个简单的 servlet,用户在其中以同步模式发起 HTTP 请求。线程只是休眠 1 秒,然后回复客户端。当我对这种模式进行负载测试时,服务器每秒只能处理 4 个请求。 现在,我将同步模式更改为异步模式,并根据请求创建一个新线程,并将原始 http 线程释放回池中。同样,启动的新线程休眠 1 秒并回复。然而,该模式的扩展性非常好,它每秒处理数百个请求。
现在的问题是,所有书籍和文章都说服务器的资源数量有限,因此每个请求保留一个线程并不好。等等。在这两种情况下,我每个请求都有一个线程,主要区别在于第一个是 http 线程,而第二个是我的自定义线程。现在的问题是,与我的自定义线程相比,HTTP 线程有什么特别之处吗?毕竟,在这两种情况下,我们每个请求都有一个线程,为什么第一个执行得不好,而第二个却没有呢?我浏览了许多文件,书籍都没有解释这个棘手的细节。你能给我一些建议吗?谢谢
【问题讨论】:
标签: java multithreading servlets jakarta-ee asynchronous