当前位置: 首页 > news >正文

java——Tomcat连接池配置NIO、BIO、APR

Tomcat连接池的配置涉及不同的IO模型,包括NIO(Non-blocking IO,非阻塞IO)、APR(Apache Portable Runtime,Apache可移植运行库)和BIO(Blocking IO,阻塞IO)。以下是这三种IO模型的对比:

一、概述

  1. NIO

    • Java SE 1.4及后续版本提供的一种新的IO操作方式。
    • 基于缓冲区,并能提供非阻塞IO操作的Java API。
    • 拥有比传统IO操作(BIO)更好的并发运行性能。
  2. APR

    • Tomcat以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作。
    • 从操作系统级别来解决异步的IO问题,能大幅度提高性能。
    • 提供高度可扩展性以及优越的性能,并且可以更好地与本地服务器技术集成。
  3. BIO

    • 传统的Java IO操作,即java.io包及其子包。
    • 性能相对较差,没有经过任何优化处理和支持。
    • 在高版本的Tomcat中,BIO模式逐渐被淘汰,Tomcat 9中甚至删除了BIO模式的实现。

二、配置与性能对比

  1. 配置

    • NIO:在Tomcat的配置文件中,将Connector的protocol属性设置为org.apache.coyote.http11.Http11NioProtocol
    • APR:需要安装APR库、APR JNI封装包(Tomcat使用)等本地组件。Tomcat在启动时会自动检测系统是否安装了APR,如果已安装,则自动采用APR进行IO处理(除非已指定Connector的protocol属性为具体的协议类)。
    • BIO:在Tomcat的配置文件中,可以使用默认的HTTP/1.1协议,或者明确指定为org.apache.coyote.http11.Http11Protocol
  2. 性能

    • NIO:由于采用了非阻塞IO,Tomcat可以同时处理的socket数目远大于最大线程数,并发性能显著提高。
    • APR:通过JNI调用本地库,实现了高性能和高可扩展性,是Tomcat上运行高并发应用的首选模式。
    • BIO:由于采用了阻塞IO,Tomcat可以同时处理的socket数目不能超过最大线程数,性能受到极大限制。

三、适用场景

  1. NIO:适用于需要高并发性能的Web应用。
  2. APR:适用于需要高性能和高可扩展性的Web应用,并且可以接受安装本地组件的复杂性。
  3. BIO:由于性能较差,不推荐在高并发场景中使用。但在某些特定场景下,如果不需要高并发性能,或者对Tomcat的IO模型没有特殊要求,也可以使用BIO。然而,随着Tomcat版本的更新,BIO模式逐渐被淘汰,因此建议在新的项目中避免使用BIO。

java——Tomcat调优策略-CSDN博客 

http://www.lryc.cn/news/492089.html

相关文章:

  • 跨域相关的一些问题 ✅
  • RPC学习
  • coe文件转mif(c语言)
  • 【leetcode】动态规划
  • 介绍一下atoi(arr);(c基础)
  • docker入门学习笔记
  • 使用Python和Pybind11调用C++程序(CMake编译)
  • tableau-制作30个图表
  • 2024APMCM亚太杯数学建模C题【宠物行业】原创论文分享
  • C语言解析命令行参数
  • 推荐一款龙迅HDMI2.0转LVDS芯片 LT6211UX LT6211UXC
  • libmodbus 源码学习笔记
  • 通用网络安全设备之【防火墙】
  • Vue.js基础——贼简单易懂!!(响应式 ref 和 reactive、v-on、v-show 和 v-if、v-for、v-bind)
  • Mybatis 执行存储过程,获取输出参数的值
  • RAG架构类型
  • Oracle 数据库 IDENTITY 列的性能选项
  • 计算(a+b)/c的值
  • OpenCV从入门到精通实战(八)——基于dlib的人脸关键点定位
  • unity | 动画模块之卡片堆叠切换
  • 前端开发工程师需要学什么?
  • 网络常见命令
  • logminer挖掘日志归档查找问题
  • Flume和kafka的整合:使用Flume将日志数据抽取到Kafka中
  • springboot实战(19)(条件分页查询、PageHelper、MYBATIS动态SQL、mapper映射配置文件、自定义类封装分页查询数据集)
  • ScreenshotToCode安装教程
  • 最佳实践:如何在 Vue.js 项目中使用 Jest 进行单元测试
  • MySQL 与 MongoDB 存储差异分析
  • 【2024】前端学习笔记19-ref和reactive使用
  • 2024.11.26总结