我正在尝试使用 Tomcat 7 Http11NioProtocol 从 NIO 中获得好处。
我刚刚读了一些关于它的文章: Understanding the Tomcat NIO Connector
并浏览:tomcat docs
我仅使用 SimpleServlet 启动了简单服务器,它计算并发线程数,等待 10 秒并返回空结果:
public class SimpleServlet extends HttpServlet {
final static Logger logger = Logger.getLogger(SimpleServlet.class);
private static final AtomicInteger threadCntr = new AtomicInteger();
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
logger.info("ProxyService doGet threads[" + threadCntr.incrementAndGet() + "]");
try {
Thread.sleep(10000L);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
logger.info("end processing");
threadCntr.decrementAndGet();
}
}
Run Code Online (Sandbox Code Playgroud)
}
配置tomcat的server.xml以使用nio协议:
<Connector port="8081" maxHttpHeaderSize="8192" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200" minSpareThreads="5" maxSpareThreads="5"
enableLookups="false" redirectPort="8443" acceptCount="1"
connectionTimeout="20000" disableUploadTimeout="true" />
Run Code Online (Sandbox Code Playgroud)
我开始发送轻量级请求并使用 Java VisualVM 监视它:
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 1000; i++) {
new Thread(() -> {
executeHttp(URL, "test"); // impl hided
}).start();
Thread.sleep(10);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,我看到只使用了 200 个线程(这没关系)但是客户端的请求每 10 秒处理次数不能超过 200 个
那么,BIO的区别在哪里呢?或者我错过了一些配置吗?Http11NioProtocol 的主要特点是什么?
| 归档时间: |
|
| 查看次数: |
3223 次 |
| 最近记录: |