use*_*868 10 java performance tomcat servlets nio
我想知道如果像Tomcat,Jetty等servlet容器已经使用nio来读取和写入数据,是否真的需要使用setWritelistner和setReadListnerservlet输入和输出流?是否有额外的性能提升?
Tomcat读取头文件(并且在NIO的非阻塞模式下执行此操作),但读取请求主体是一个应用程序问题,并使用阻塞IO执行(直到规范的Servlet 3.0要求).同样,写入响应是通过阻塞IO来完成的,因为这也是规范的要求.
所有这些都随Servlet 3.1而改变.
您可能希望看到电子邮件Thread for this
para和code示例下面是来自Java EE 7 Recipies,它解释了setWritelistner和setReadListner的使用
为了实现非阻塞I/O解决方案,ServletInputStream和ServletOutputStream中添加了新的编程接口,以及两个事件侦听器:ReadListener和WriteListener.ReadListener和WriteListener接口使servlet I/O处理通过回调方法以非阻塞方式进行,这些方法可以在不阻塞的情况下读取或写入servlet内容时调用.使用ServletInputStream.setReadList ener(ServletInputStream,AsyncContext)方法向ServletInputStream注册ReadListener,并使用I/O读取ServletInputStream.setWriteListener(ServletOutputStream,AsyncContext)方法,用于注册WriteListener.以下代码行演示了如何使用ServletInputStream注册ReadListener实现:
AsyncContext context = request.startAsync();
ServletInputStream input = request.getInputStream();
input.setReadListener(new ReadListenerImpl(input, context));
Run Code Online (Sandbox Code Playgroud)
关于"性能增益" 的好处不直接1.这些方法的目的是避免请求线程(在异步模式下)在读取输入(POST)数据或写入文档时阻塞.
Java EE7教程中有一个示例:"17.13.1使用非阻塞I/O读取大型HTTP POST请求"(链接已更新).
这与Tomcat在封面下使用nio是正交的.
1 - 有间接的性能优势.当线程可能阻塞网络I/O时,增加吞吐量的另一种策略是增加工作线程的数量.但这会增加内存占用(以及其他因素),从而导致更多的"开销".
| 归档时间: |
|
| 查看次数: |
6460 次 |
| 最近记录: |