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文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...
随机推荐
- oracle学习笔记(十一) 高级查询
高级查询 分组查询 select * from student [where ] [having ] --二次限定 [order by] --asc升序 desc降序 默认升序 查看EMPLOYEE表 ...
- qt 界面去掉系统边框
该代码在Qt5框架编辑,使用该类时, 直接继承这个类就可以了. 实现了拖拽功能和关闭功能,如果需要放大缩小功能, 需自己实现. 1 #ifndef CUSTOMIZE_QWIDGET_H #defin ...
- python基础(12):函数(二)
1. 函数参数 之前我们说过了传参,如果我们需要给⼀个函数传参,⽽参数⼜是不确定的,或者我给⼀个函数传很多参数,我的形参就要写很多,很⿇烦,怎么办呢,我们可以考虑使⽤动态参数. 形参的第三种: 动态参 ...
- SpringBoot(七) SpringBoot整合Log4j
第一种打印debug日志方式: logging.level.com.demo.mapper: debug 第二种打印debug日志方式: 在resource文件夹下新建:logback.xml < ...
- async/await简单使用
function process(i) { var p = new Promise(function(resolve,reject){ setTimeout(function(){ console.l ...
- html5+css+js简单了解
最近敲了敲HTML5的代码,感觉真的是很吸引人的东西,反正我是非常喜欢的,所以想写一点关于HTML的东xi首先呢我了解的不多,所以也是想写一点点我对它的认识.说起HTML5是打开Pycharm敲pyt ...
- msf中的情报搜集
msf中的情报搜集 被动的信息搜集 使用被动的.间接的信息搜索技巧,可以在目标不察觉的情况下挖掘目标的相关信息. 公开渠道情报搜集 对公开的和已知的信息进行检索筛选,获取到目标的情报集合,一系列的 ...
- Python用Pandas读写Excel
Pandas是python的一个数据分析包,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷地处理数据的函数和方法. Pandas官方文档 ...
- win10安装ubuntu系统出现的一些问题以及解决方案
前言 在win10系统进行安装新的ubuntu环境的时候遇到的一些问题,以及解决方案,供以后参考. 准备 从ubuntu官网下载最近版本的ubuntu系统,Ubuntu最新版本下载地址 操作系统:wi ...
- ssh-copy-id 命令自动复制本机公钥到远程机器
ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized ...