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文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...
随机推荐
- RocketMQ(4)---RocketMQ核心配置讲解
RocketMQ核心配置讲解 RocketMQ的核心配置在broker.conf配置文件里,下面我们来分析下它. 一.broker.conf配置 下面只列举一些常用的核心配置讲解. 1.broker. ...
- Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT权限验证【必看】
本文梯子 本文3.0版本文章 前言 1.如何给接口实现权限验证? 零.生成 Token 令牌 一.JWT ——自定义中间件 0.Swagger中开启JWT服务 1:API接口授权策略 2.自定义认证之 ...
- Java生鲜电商平台-App系统架构开发与设计
Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计2.Java生鲜电商平台-App架构设计经验谈:技 ...
- ZooKeeper安装、配置和使用
Zookeeper的概述: ZooKeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. ZooKeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, ...
- JavaScript中break、continue和return的区别
break function myBreak() { for(var i = 0; i < 5; i++) { if(i == 3) { break; } console.log(i); } } ...
- union注入的几道ctf题,实验吧简单的sql注入1,2,这个看起来有点简单和bugku的成绩单
这几天在做CTF当中遇到了几次sql注入都是union,写篇博客记录学习一下. 首先推荐一篇文章“https://blog.csdn.net/Litbai_zhang/article/details/ ...
- 设置view的layer属性方法
1.需要导入QuartzCore.framewoork框架到工程2.在文件中导入#import 3.设置 必须导入的空间 #import<QuartzCore/QuartzCore.h> ...
- CODING 受邀参加《腾讯全球数字生态大会》
近日,腾讯全年最重要的一场活动--<腾讯全球数字生态大会>于昆明滇池国际会展中心正式举办.此次全球数字生态大会是腾讯战略升级后,整合互联网+数字经济峰会.云+未来峰会.腾讯全球合作伙伴三大 ...
- 什么是测试系统工程师(TSE)?
深圳市共创力研发咨询 杨学明/文 TSE(Test System Engineer)简称测试系统工程师,作为系统工程(SE)团队的一员,很多公司目前还没有这样的角色,导致测试部分往往处理弱势,第一,不 ...
- Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因
Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因:接口响应数据中有&#