Boz*_*zho 14 java tomcat asynchronous
在阅读了Tomcat NIO连接器之后,我仍然没有得到一件事:如果应用程序代码阻塞,nio连接器是否有用,即在读取文件系统时,在调用外部Web服务时阻止从数据库读取?
因此,例如,您有一个类似REST的API,它接收请求,从数据库中读取内容并返回响应.它不使用servlet 3异步,它只是写入响应.
我没有找到NIO连接器使用的线程池的完整描述,但我想它有一个用于处理请求的线程池,因此每个请求最终都在它自己的线程中,它可以阻塞.
如果是这种情况,NIO的好处是否仍然存在,或者阻止代码会降低NIO的好处(在资源利用方面)?
Ber*_*sch 10
如果应用程序代码阻塞,nio连接器是否有用......?
是的,NIO连接器的构建假设您的应用程序将阻塞某处.NIO连接器基本上有几个套接字占位符,并响应新的传入请求,直到信息开始被写回.
我没有找到NIO连接器使用的线程池的完整描述
我认为这是你困惑的开始.Tomcat NIO有一个选择器池,而不是一个线程池(引用).连接器代码轮询每个选择器以查看它是否有要发送的传入或传出字节.从这个意义上讲,给定请求的选择器将继续接收信息,直到有足够的处理请求的请求/响应对象为桥接同步I/O和异步I/O(引用)之间的差距.
轮询代码永远不会阻塞比序列化信息包所花费的时间更长的时间,因此可以自由处理新请求.唯一真正的限制是Tomcat可用的内存量.虽然存在线程池,但使用的实际线程数远低于应用程序可以处理的连接数(引用).
虽然Tomcat连接器(引用)之间存在性能差异,但当servlet本身阻塞时,原始请求/响应时间的差异非常小.但是,当您使用非阻塞I/O时,Tomcat可以处理的并发请求数量的差异会有很大差异.
| 归档时间: |
|
| 查看次数: |
2719 次 |
| 最近记录: |