tomcat的三种运行模式+JAVA NIO

总结一下Tomcat的IO模型和Tomcat调优 对象池技术的目的就是对象的缓存和复用,以空间换时间。同步队列来进行生产-消费模式进行通信,Poller的本质就是一个Selector,由一个单独的线程while(true)监测Channel的就绪状态,一旦有Channel可读,就会生成一个SocketProcessor任务对象给Executor线程池处理。Tomcat里面NIO的实现是交给Endpoint组件完成的,NioEndpoint是基于JDK的NIO实现的多路复用的IO模型,并且Tomcat的网络模型是。Acceptor和Poller是通过。... 阅读详情

转载自:https://www.iteye.com/blog/uule-2438763

详解Tomcat三种运行模式(BIO, NIO, APR)的比较和场景分析

在这里插入图片描述NIO 方式:
在这里插入图片描述Tomcat8.0起已经默认nio模式,不需要做修改,BIO模式也已经抛弃了,今天主要介绍下tomcat的三种运行模式:BIO、NIO、ARP。

TOMCAT BIO、NIO、AIO适用场景分析:

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

NIO方式适用于【连接数目多且连接比较短】(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

AIO方式使用于【连接数目多且连接比较长】(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

这三种模式的不同之处如下:

BIO:

【一个线程处理一个请求】。

缺点:【并发量高时,线程数较多,浪费资源】。

Tomcat7或以下,在Linux系统中默认使用这种方式。

NIO:

【利用Java的异步IO处理】,可以通过【少量的线程处理大量的请求】。

Tomcat8在Linux系统中默认使用这种方式。

APR:

即Apache Portable Runtime,从操作系统层面解决io阻塞问题。

Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。

=============================================================

NIO是什么?适用于何种场景?
NIO模型,select/epoll的区别,多路复用的原理
原生的 NIO 在 JDK 1.7 版本存在 epoll bug

JAVA BIO:

来一个新的连接,我们就新开一个线程来处理这个连接,之后的操作全部由那个线程来完成。

那么,这个模式下的性能瓶颈在哪里呢?

首先,每次来一个连接都开一个新的线程这肯定是不合适的。当活跃连接数在几十几百的时候当然是可以这样做的,但如果活跃连接数是几万几十万的时候,这么多线程明显就不行了。

【每个线程都需要一部分内存,内存会被迅速消耗】,同时,【线程切换的开销也非常大】。

其次,阻塞操作在这里也是一个问题。首先,【accept() 是一个阻塞操作,当 accept() 返回的时候,代表有一个连接可以使用了】,我们这里是马上就新建线程来处理这个 SocketChannel 了,

但是,【但是这里不代表对方就将数据传输过来了】。所以,SocketChannel#read 方法将阻塞,等待数据,明显这个等待是不值得的。

同理,write 方法也需要等待通道可写才能执行写入操作,这边的阻塞等待也是不值得的。

JAVA NIO:

非阻塞 IO 的核心在于【使用一个 Selector 来管理多个通道】,可以是 SocketChannel,也可以是 ServerSocketChannel,【将各个通道注册到 Selector上,指定监听的事件】。

之后可以【只用一个线程来轮询这个 Selector,看看上面是否有通道是准备好的】,当通道准备好可读或可写,然后才去开始真正的读写,这样速度就很快了。我们就完全没有必要给每个通道都起一个线程。

Channel

所有的 NIO 操作始于通道,通道是数据来源或数据写入的目的地,主要地,我们将关心 java.nio 包中实现的以下几个 Channel:

FileChannel:文件通道,用于文件的读和写,FileChannel 不支持非阻塞

DatagramChannel:用于 UDP 连接的接收和发送

SocketChannel:把它理解为 TCP 连接通道,简单理解就是 TCP 客户端

ServerSocketChannel:TCP 对应的服务端,用于监听某个端口进来的请求

Selector

NIO 三大组件就剩 Selector 了,【Selector 建立在非阻塞的基础之上】,大家经常听到的 【多路复用】 在 Java 世界中指的就是它,【用于实现一个线程管理多个 Channel】。

select:上世纪 80 年代就实现了,它支持注册 FD_SETSIZE(1024) 个 socket,在那个年代肯定是够用的,不过现在嘛,肯定是不行了。

poll:1997 年,出现了 poll 作为 select 的替代者,最大的区别就是,【poll 不再限制 socket 数量】。

【select 和 poll 都有一个共同的问题,那就是它们都只会告诉你有几个通道准备好了,但是不会告诉你具体是哪几个通道】。所以,【一旦知道有通道准备好以后,自己还是需要进行一次扫描】,显然这个不太好,通道少的时候还行,一旦通道的数量是几十万个以上的时候,扫描一次的时间都很可观了,时间复杂度 O(n)。所以,后来才催生了以下实现。

epoll:2002 年随 Linux 内核 2.5.44 发布,【epoll 能直接返回具体的准备好的通道】,时间复杂度 O(1)。

下面对 Java 异步 IO 进行实践性的介绍。

总共有三个类需要我们关注,分别是 AsynchronousSocketChannel,AsynchronousServerSocketChannel 和 AsynchronousFileChannel,只不过是在之前介绍的 FileChannel、SocketChannel 和 ServerSocketChannel 的类名上加了个前缀 Asynchronous。

Java 异步 IO 提供了两种使用方式,分别是返回 Future 实例和使用回调函数。

OpenAI硬件产品技术解析:AI推理加速与边缘计算部署指南 AI推理加速技术通过专用硬件优化模型计算过程,其核心原理是利用并行计算架构和内存带宽优化来提升推理效率。在技术价值层面,专用AI硬件能够显著降低延迟、提高吞吐量,同时减少对云端服务的依赖。边缘计算作为重要应用场景,将AI能力部署到网络边缘,实现本地化数据处理和实时响应。结合OpenAI在模型优化方面的深厚积累,其硬件产品可能深度集成GPT系列模型,为开发者在AI推理加速和边缘部署场景提供更优解决方案。这类技术特别适用于需要低延迟响应的实时对话系统、内容生成工具等应用,同时为企业用户提供更好的数据隐私保护机制 阅读详情

相关推荐

最强Tomcat8性能优化

授人以鱼不如授人以渔 本博客的目的不在于给出最佳配置,而是带领开发者,能够从实际情况出发,通过不断的调节tomcat和jvm参数,去发现吞吐量,平均响应时间和错误率等信息的变化,同时根据服务器的cpu和内存等信息,结合接口的业务逻辑,最好是测试使用率最高,并发最大,或者是最重要的接口(比如下单支付接口),设置最优的tomcat和jvm配置参数。 整理了一份Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。基本上涵盖了Ja

yuandengta的博客 1895

详解Tomcat三种运行模式(BIO, NIO, APR)的比较和场景分析

转载于 http://server.51cto.com/sOS-595052.htm 概述 Tomcat8.0起已经默认nio模式,不需要做修改,BIO模式也已经抛弃了,今天主要介绍下tomcat的三种运行模式:BIO、NIO、ARP。 简述及配置运行模式 1、bio:没经过任何优化和处理,几百并发性能极低下。 配置server.xml <Connector port="8080" pro...

qq_33271461的博客 3231

tomcat:Java使用nio模式实现tomcat

tomcat:Java使用nio模式实现tomcat

tomcat线程模型-源码解析

‍上文:tomcat-整启动流程-源码解析tomcat线程模型是什么?tomcat8以上默认是NIO,tomcat支持四种接收请求的处理方式:BIO,NIO,APR、AIO,用于处理tomcat处理客户端连接进来的后的各种请求的处理。其中处理连接的线程为单线程,而处理如果是读写事件则交给专门的线程池处理。BIO、NIO、NIO2、ARP作用与区别对比BIONION......

逍遥壮士 1807

BSL编程语言 —— 系统化程序设计

BSL编程语言简介 文章目录0. 选择编程语言1. 写简单的表达式(Expression) 0. 选择编程语言 如果你第一次使用DrRacket,打开后需要选择Beginning Student Language (BSL) Language -> Choose Language (或直接按Ctrl + L),看到如下洁面后选择Beginning Student,点击OK 定义区【De...

CSDoneRight的博客 6450

centos7安装Ambari 2.7.5 + HDP3.1.5

准备 1.安装包准备: Ambari2.7.5、HDP31.5、libtirpc-devel: centos7操作系统: 链接:https://pan.baidu.com/s/1vzvio5rAMsbYF0-0vBs5dw 提取码:xij9

kxq的博客 5091

java aio apr_详解Tomcat三种运行模式(BIO, NIO, APR)的比较和场景分析

概述Tomcat8.0起已经默认nio模式,不需要做修改,BIO模式也已经抛弃了,今天主要介绍下tomcat的三种运行模式:BIO、NIO、ARP。简述及配置运行模式1、bio:没经过任何优化和处理,几百并发性能极低下。配置server.xmlconnectionTimeout="20000"redirectPort="8443"URIEncoding="UTF-8"/>2、nio:利用ja...

weixin_31758621的博客 228

ROS2机械臂MPC轨迹规划实战:从MoveIt 2插件配置到参数调优全流程

本文详细介绍了ROS2机械臂MPC轨迹规划的全流程,从MoveIt 2插件配置到参数调优。通过模型预测控制(MPC)技术,实现高精度运动控制,特别适合复杂装配任务。文章包含环境搭建、插件部署、参数设计及实战调优方法,帮助开发者快速掌握ROS2机械臂的MPC轨迹规划技术。

i0j1k2l3m的博客 206

java aio apr_2019.9.22 Tomcat的三种运行模式 (BIO,NIO,AIO也叫apr)

1、同步概念:同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API)。阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回)。非阻塞 : 柜台取...

weixin_34308696的博客 262

Ubuntu环境下读取罗技G29方向盘信息

Ubuntu环境下读取罗技G29方向盘信息

工大机器人工作室 3463

YOLOv8 Neck改进:BiFPN双向特征金字塔网络解析与实践

本文详细介绍了如何在YOLOv8中集成BiFPN双向特征金字塔网络,包括原理解析、代码实现、配置文件修改和性能分析。BiFPN通过双向特征融合和加权特征机制,显著提升了多尺度目标检测的性能。希望通过本文的讲解,大家能够深入理解BiFPN的工作原理,并成功将其应用到自己的目标检测项目中。如果你有任何问题或建议,欢迎在评论区留言讨论!在下一篇文章中,我们将探讨YOLOv8的其他改进技术,包括注意力机制、新的损失函数等,敬请期待!

QQ_778132974的博客 991

tomcat的三种模式(bio、nio、apr)

tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。  1)bio  默认的模式,性能非常低下,没有经过任何优化处理和支持.  2)nio  利用java的异步io护理技术,noblocking IO技术.  想运行在该模式

tuzi37的专栏 1028

Python爬虫教程:抓取区块链交易信息及加密货币市场数据

随着区块链技术和加密货币的迅猛发展,区块链交易和加密货币市场的数据逐渐成为金融、技术、经济研究等领域的热点。对于开发者和研究者而言,实时获取区块链交易数据和加密货币市场行情,对于投资分析、市场预测、技术研究等具有重要的参考价值。本文将通过Python爬虫技术,介绍如何抓取区块链交易信息及加密货币市场数据,详细阐述数据获取的原理、技术方案、实现方法以及抓取到的数据的存储与分析。我们将依托最新的爬虫技术,如requestsSeleniumScrapy,以及相关的数据处理库(如pandasmatplotlib。

2201_76125261的博客 2777

java 运行模式_浅谈Tomcat三种运行模式

tomcat的运行模式有3种一、bio(blocking i/o)即阻塞式i/o操作,表示tomcat使用的是传统的java i/o操作(即java.io包及其子包)。是基于java的http/1.1连接器,tomcat7以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过tomcat manager来查看服务器的当前状态。(tomcat7 或...

weixin_42359255的博客 177

FPGA控制AD5754实现模数转换Verilog代码与测试激励

本文提供了使用FPGA控制AD5754芯片实现数字信号转模拟信号的Verilog代码和测试激励。AD5754芯片简介:AD5754是一款16位数字信号转模拟信号的芯片。通信方式:FPGA与AD5754之间通过SPI接口进行通信,SPI时钟clk的最大频率为30MHz。模拟输出:AD5754提供了四路模拟输出。工作方式:当前AD5754采用单极性工作方式。指令刷新:根据现有理解,同轴的速度和电流指令应同时刷新。利用LDAC引脚控制模拟信号的刷新,但需实际验证。CLR信号验证。

whm128的博客 246

Claude Code 100个真实案例 - 用AI设计Arduino PCB电路板(硬件小白也能画板)

本案例展示如何使用 Claude Code 配合 KiCad 的 Python 脚本接口,从零设计一块 Arduino 传感器扩展板 PCB。从原理图符号创建、网表生成到 PCB 布局布线,全程自动化完成,最终输出可直接发给工厂打样的 Gerber 文件。

yueyeguzhuo的专栏 438

JAVA的BIO,NIO,AIO

一:名词解释 NIO nio 是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持锁和内存映射文件的文件访问接口。 – 提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I

janvinal的专栏 1106

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式(未完善)

原文地址http://www.oschina.net/question/54100_16195 tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。 1)bio 默认的模式,性能非常低下,没有经过任何优化处理和支持. 2)nio

TrustNature 2745

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

tomcat7.0.27的bio,nio.apr高级运行模式

一 前言 tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。 二 bio 默认的模式 blocking...

chongjubao8359的博客 169

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Tomcat的运行模式

tomcat的三种运行模式 tomcat Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如下: ●BIO: 一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。 ●NIO: 利用Java的异步IO处理,可以通过少量的线程处理大量的请求。...

diandunmeng2822的博客 91

tomcat 运行java_浅谈Tomcat三种运行模式

tomcat的运行模式有3种一、bio(blocking I/O)即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。(Tomcat7 或...

weixin_32314595的博客 580

Tomcat的三种模式区别及配置

Tomcat的运行模式有3种,即BIO、NIO和APR。 BIO 一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。 NIO 利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。 Tomcat7必须server.x...

胡邪的博客 1594

tomcat7.0.8的bio,nio.apr高级运行模式

tomcat7.0.8的bio,nio.apr高级运行模式 一 前言     tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。 二 bio 默认的模式 blocking IO,性能非常低下,没有经过任何优化处理和支持. 三 ...

一条鱼 + 一条鱼 92

Tomcat运行模式和模式切换

tomcat的运行模式有3种 1)bio(blocking I/O) 即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。(Tomcat7...

weixin_43557605的博客 650
上一篇: 什么是JNDI?
下一篇: 深度解读Tomcat中的NIO模型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值