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文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...
随机推荐
- 黑马程序员面试宝典(Java)Beta6.0免费下载
场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? ...
- layui 集成第三方和自定义组件到模块规范
1.新建一个layui.extend.js文件,页面调用时这个文件放到layui.js后面. 2.基础的配置卸载config中,扩展的组件写入extend,组件的路径是相对于config下base的路 ...
- VectorMap.js 矢量地图库 – 快速入门
VectorMap.js是一个开源地图渲染JavaScript库, 可以使用WebGL或者HTML5两种方式进行交互式矢量地图 (包括“矢量瓦片地图”,一般性矢量数据地图)和 栅格瓦片地图的渲染. W ...
- MVC 身份证图像识别(调用dll)
源码下载 -> 提取码 QQ505645074 Index.cshtml <!DOCTYPE html> <html> <head> <meta cha ...
- Oracle大数据解决方案》学习笔记5——Oracle大数据机的配置、部署架构和监控-1(BDA Config, Deployment Arch, and Monitoring)
原创预见未来to50 发布于2018-12-05 16:18:48 阅读数 146 收藏 展开 这章的内容很多,有的学了. 1. Oracle大数据机——灵活和可扩展的架构 2. Hadoop集群的 ...
- SQL server 2012 各个版本比较
有关不同版本的 SQL Server 2012 所支持的功能的详细信息. 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Service ...
- VM虚拟机Android安装图形界面
摘自,转 https://blog.csdn.net/weixin_42633191/article/details/89391188
- Day_04 面向对象
概述 对于面向对象编程的支持,Go语言设计得非常简洁而优雅.因为,Go语言并没有沿袭传统 面向对象编程中的诸多概念,比如继承(不支持继承,尽管匿名字段的内存布局和行为类似继承,但它并不是继承). 虚函 ...
- Ambari 大数据集群管理
最近做了一个大数据项目,研究了下集群的搭建,现在将集群搭建整理的资料与大家分享一下!如有疑问可在评论区回复. 1前置配置 Centos7系统,每台系统都有java运行环境 全程使用root用户,避免安 ...
- 【cf1111】C. Creative Snap (dfs+dp)
传送门 简单的dfs+dp即可解决.根本不用动态开点 /* * Author: heyuhhh * Created Time: 2019/11/13 10:12:42 */ #include < ...