上节课我们说到的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(二)的更多相关文章

  1. [转帖]java架构之路-(面试篇)JVM虚拟机面试大全

    java架构之路-(面试篇)JVM虚拟机面试大全 https://www.cnblogs.com/cxiaocai/p/11634918.html   下文连接比较多啊,都是我过整理的博客,很多答案都 ...

  2. java架构之路-(tomcat网络模型)简单聊聊tomcat(一)

    tomcat使我们熟知的也是我们使用最多的web服务器了,至少我是使用最多的.常见的web服务器还有Apache,web logic,JBOSS等,对于tomcat的安装我就不再赘述了,简单的不能再简 ...

  3. java架构之路-(Redis专题)简单聊聊redis分布式锁

    这次我们来简单说说分布式锁,我记得过去我也过一篇JMM的内存一致性算法,就是说拿到锁的可以继续操作,没拿到的自旋等待. 思路与场景 我们在Zookeeper中提到过分布式锁,这里我们先用redis实现 ...

  4. java架构之路-(Redis专题)SpringBoot连接Redis超简单

    上次我们搭建了Redis的主从架构,哨兵架构以及我们的集群架构,但是我们一直还未投入到实战中去,这次我们用jedis和springboot两种方式来操作一下我们的redis 主从架构 如何配置我上次已 ...

  5. java架构之路-(Redis专题)聊聊大厂那些redis

    上几次说了redis的主从,哨兵,集群配置,但是内部的选举一直没说,先来简单说一下选举吧. 集群选举 redis cluster节点间采取gossip协议进行通信,也就是说,在每一个节点间,无论主节点 ...

  6. java架构之路(MQ专题)kafka集群配置和简单使用

    前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅 ...

  7. java架构之路-(mysql底层原理)Mysql之让我们再深撸一次mysql

    让我再深撸一次mysql吧,这次主要以应对面试来说说mysql,大概几个方向,索引结构,查询引擎,索引优化,explain的详解和trace工具的使用. 索引: 我们先来看一下mysql的B+tree ...

  8. java架构之路-(分布式)初识zookeeper安装与参数详解

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  9. java架构之路-(JVM优化与原理)JVM类的加载机制

    话不多说,先上图. ***.class文件执行大概就是这样来走的.我们都知道我们的java文件经过编译以后会生成对应的class文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...

随机推荐

  1. 死磕 java同步系列之Semaphore源码解析

    问题 (1)Semaphore是什么? (2)Semaphore具有哪些特性? (3)Semaphore通常使用在什么场景中? (4)Semaphore的许可次数是否可以动态增减? (5)Semaph ...

  2. 服务端性能测试技能tree

    ALL: Left: Right: 摘抄一下(觉得不错) 以下来自百度百科 ---- 软件性能测试 软件性能测试是在交替进行负荷和强迫测试时常用的术语.理想的“软件性能测试”(和其他类型的测试)应在需 ...

  3. CMD查看redis

    进入redis安装目录执行 redis-cli.exe -h 127.0.0.1 -p 6379

  4. 性能优化之mybatis实现接口的批量查询,减少数据库的查询消耗

    <select id="selectByTime" resultType="com.neo.xnol.api.activity.dto.ActivityMqmsgD ...

  5. iOS 唤起APP之URL Scheme

    什么是URL Scheme 简单的说,由于苹果选择使用沙盒机制来保障用户的隐私和安全,APP只能访问自己沙盒数据,但同时也阻碍了应用间合理的信息共享.因此苹果提供了一个可以在APP之间跳转的方法:UR ...

  6. gyp编译工具

    最近用到了 node-gyp 这个工具, 是node 社区对 google gyp 编译工具的一个封装, 使用 node-gyp 工具可以用C++为node 项目编写 addon. 了解了一下 goo ...

  7. 【BZOJ2655】calc(拉格朗日插值)

    bzoj 题意: 给出\(n\),现在要生成这\(n\)个数,每个数有一个值域\([1,A]\).同时要求这\(n\)个数两两不相同. 问一共有多少种方案. 思路: 因为\(A\)很大,同时随着值域的 ...

  8. python-判断文件后缀名

    >>> str = 'jidlhdpf.jpg' >>> str.endswith('.jpg') True endswith

  9. android appium微信等自动化的那些坑儿

    1.下载appium自动化安装环境: appium客户端 python语言支持 android studio(包含android sdk和adb) java开发环境 2.微信x5内核调试(网上有详细配 ...

  10. UOJ Easy Round #5

    Preface 本着刷遍(只刷一遍)各大OJ的原则我找到了一场UOJ的比赛 无奈UOJ一般的比赛难度太大,我就精选了UER中最简单的一场打了一下,就当是CSP前的练习吧 A. [UER #5]万圣节的 ...