我的理解
没有使用NIO:
对于每个保持连接的请求,服务器将继续阻塞一个线程。
使用了NIO:
此连接器具有几个轮询线程,用于保持所有连接用户的连接活动,同时在有新的HTTP请求可用时调用工作线程。
现在: 如果我有一个简单的servlet向客户端(浏览器)返回一个100KB的字符串。
....
String HunderdKBString = "reallylongstring"
PrintWriter out = response.getWriter();
out.println(HunderdKBString);
....
如果一个带有1 KB连接的客户端连接,则需要大约100秒才能接收字符串。
那么Java线程会被阻塞大约100秒吗?
TCP缓冲区、Java OutputStream
或Writer
或其他缓冲区如何影响线程阻塞时间?
PS:在CentOS 7上使用apache-tomcat-8.0.24和Oracle JDK 1.7。
编辑:正如提到的,线程确实会被阻塞,并且缓冲区可以减少线程阻塞时间...如何通过使用这些缓冲区来优化Tomcat/OS以减少线程阻塞时间?
如何在生产环境中检测是否由于许多慢速连接客户端连接到Tomcat而使其线程饥饿?