java架构之路-(tomcat网络模型)简单聊聊tomcat(二)
上节课我们说到的Tomcat,并且给予了一般的tomcat配置,和配置的作用,提到了HTTP/1.1
也就是我们的网络通讯模型,那么HTTP/1.1又代表什么呢。我们来简答看一下。
tomcat有四种网络通讯模型分别为BIO,NIO,AIO还有APR(Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作。使用需要编译安装APR 库,这里不做过多解释,一般不用,有兴趣的小伙伴看自行去研究)。
那么什么又是IO呢?
IO是指为数据传输所提供的输入输出流,其输入输出对象可以是:文件、网络服务、内存等。
这里说一下,在tomcat7中,默认的HTTP/1.1是我们的BIO模型,tomcat8默认的是我们的NIO模型,但是也支持BIO,
什么是BIO呢?BIO又长什么样子呢?我这里简单的画一个图来看看。

BIO是一个同步阻塞式IO,在tomcat7中默认HTTP/1.1就是我们的BIO模型,同时tomcat7支持NIO,但不支持AIO。
BIO理论上一个是一个请求过来会分配一个线程来处理这个请求,对于性能开销是很大的。就是我们线程需要等候你的数据处理完再返回给客户端。
BIO的配置protocol="org.apache.coyote.http11.Http11Protocol"
NIO是一个同步非阻塞式IO,在tomcat8中默认的就是NIO模型 ,也支持AIO.
NIO需要少量的请求就可以处理大量的请求,请求发送到服务端时,我们NIO会分配一个线程去处理该请求,但是不会等待你的处理,你处理完成以后了,多路复用选择器会来轮询是你否处理完成,处理完成再返回给客户端,大大的减少了线程数目和线程的使用率。
NIO的配置protocol="org.apache.coyote.http11.Http11NioProtocol"

AIO是一个异步非阻塞式IO,和NIO基本类似,但是AIO是没有多路复用选择器的,AIO是通过一个异步的事件来通知请求处理已经完成的。AIO的Poller线程是两个,但是具体是不是一个接受,一个发送的不清楚,暂时那样画啦。
AIO的配置protocol="org.apache.coyote.http11.Http11Nio2Protocol"。
BIO
线程数量会受到客户端阻塞、网络延迟、业务处理慢===>线程数会更多
NIO
线程数量会受到业务处理慢===>线程数会更多
也就是说代码写的好点,不然XO也白扯的。
给大家一个参数表,可以更好的去配置tomcat

Tomcat也是采用了类似双亲委派的加载机制来加载,只能说一部分是双亲委派吧。顶层和jvm是一致的,但是我们的tomcat同时部署两个项目,一个是spring4的项目,另外一个是spring5的项目,这时他就是一个倒置的过程。如图所示
tomcat大致也就说这么多,明天我们来说说jvm的优化,也说说今天只是提了一下双亲委派机制。
最进弄了一个公众号,小菜技术,欢迎大家的加入

java架构之路-(tomcat网络模型)简单聊聊tomcat(二)的更多相关文章
- [转帖]java架构之路-(面试篇)JVM虚拟机面试大全
java架构之路-(面试篇)JVM虚拟机面试大全 https://www.cnblogs.com/cxiaocai/p/11634918.html 下文连接比较多啊,都是我过整理的博客,很多答案都 ...
- java架构之路-(tomcat网络模型)简单聊聊tomcat(一)
tomcat使我们熟知的也是我们使用最多的web服务器了,至少我是使用最多的.常见的web服务器还有Apache,web logic,JBOSS等,对于tomcat的安装我就不再赘述了,简单的不能再简 ...
- java架构之路-(Redis专题)简单聊聊redis分布式锁
这次我们来简单说说分布式锁,我记得过去我也过一篇JMM的内存一致性算法,就是说拿到锁的可以继续操作,没拿到的自旋等待. 思路与场景 我们在Zookeeper中提到过分布式锁,这里我们先用redis实现 ...
- java架构之路-(Redis专题)SpringBoot连接Redis超简单
上次我们搭建了Redis的主从架构,哨兵架构以及我们的集群架构,但是我们一直还未投入到实战中去,这次我们用jedis和springboot两种方式来操作一下我们的redis 主从架构 如何配置我上次已 ...
- java架构之路-(Redis专题)聊聊大厂那些redis
上几次说了redis的主从,哨兵,集群配置,但是内部的选举一直没说,先来简单说一下选举吧. 集群选举 redis cluster节点间采取gossip协议进行通信,也就是说,在每一个节点间,无论主节点 ...
- java架构之路(MQ专题)kafka集群配置和简单使用
前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅 ...
- java架构之路-(mysql底层原理)Mysql之让我们再深撸一次mysql
让我再深撸一次mysql吧,这次主要以应对面试来说说mysql,大概几个方向,索引结构,查询引擎,索引优化,explain的详解和trace工具的使用. 索引: 我们先来看一下mysql的B+tree ...
- java架构之路-(分布式)初识zookeeper安装与参数详解
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...
- java架构之路-(JVM优化与原理)JVM类的加载机制
话不多说,先上图. ***.class文件执行大概就是这样来走的.我们都知道我们的java文件经过编译以后会生成对应的class文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...
随机推荐
- ElasticStack的入门学习
Beats,Logstash负责数据收集与处理.相当于ETL(Extract Transform Load).Elasticsearch负责数据存储.查询.分析.Kibana负责数据探索与可视化分析. ...
- java高并发系列 - 第9天:用户线程和守护线程
守护线程是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程.JIT线程都是守护线程.与之对应的是用户线程,用户线程可以理解为是系统的工作线程,它会完成这个程序需要完成的业务操作.如果 ...
- 从程序集加载类型,遇到 ReflectionTypeLoadException 的处理办法
处理办法 catch ReflectionTypeLoadException ,然后从里面读取 Types 数据(成功加载的类型)就可以了. 参考 ReflectionTypeLoadExceptio ...
- python基础(16):内置函数(二)
1. lamda匿名函数 为了解决⼀些简单的需求⽽设计的⼀句话函数 # 计算n的n次⽅ def func(n): return n**n print(func(10)) f = lambda n: n ...
- 黑马程序员面试宝典(Java)Beta6.0免费下载
场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...
- DS12C887实时时钟
实物图 引脚定义 GND. VCC:直流电源,其中VCC接+5V输入,GND接地,当VCC输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读.写操作:当VCC的输入小于+4. ...
- 上传App Store 被拒问题及解决方案总结
最近公司比较忙,一直忙着写代码做新的应用,一连上线了几个应用,我们也是忙得焦头烂额的,都没时间做总结,今天趁APP审核期间,总结一下近期上传App Store遇到的一些问题和解决方法,以便以后查阅. ...
- Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
本博主在一次个人移动端项目中,遇到这么一个需求:希望自己的项目中,头部导航条的效果可以像今日头条那样,横向滚动! 对于这样的效果,在各大移动端项目中几乎是随处可见,为什么呢? 我们都知道,对于移动端也 ...
- MongoDB 最近遇到的几个小问题
(1)连接数据库时报错 ERROR Topshelf.Hosts.ConsoleRunHost.Run An exception occurred System.TimeoutException: A ...
- Troubleshooting ORA-01555 - Snapshot Too Old: Rollback Segment Number "String" With Name "String" Too Small (Doc ID 1580790.1)
Troubleshooting ORA-01555 - Snapshot Too Old: Rollback Segment Number "String" With Name & ...