1. BIO + 同步 Servlet
- 一个请求,一个工作线程,CPU 利用率低。
- 新版本不再使用。
2. APR + 异步 Servlet
- apr(Apache Portable Runtime/Apache 可移植运行库),是 Apache HTTP 服务器的支持。
- JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作。
- Tomcat 默认监听指定路径,如果有 apr 安装,则自动启用。
3. NIO + 异步 Servlet
- Tomcat8 开始,默认 NIO 方式。
- 非阻塞读取请求消息,非阻塞处理下一个请求,完全异步。
4. NIO 处理流程
- 接收器接收套接字。
- 接收器从缓存中检索 nioChannel 对象。
- Pollerthread 将 nioChannel 注册到它的选择器 IO 事件。
- 轮询器将 nioChannel 分配给一个 work 线程来处理请求。
- SocketProcessor 完成对请求的处理和返回。