『互联网架构』软件架构-tomcat之线程源码熟悉通信方式(上)(21)

栏目: Java · 发布时间: 5年前

内容简介:今天说说tomcat线程源码模型,想通过tomcat的线程源码的模型,老铁们可以熟悉关于连接的,高并发的一些配置。之前就是配置好了,就永久受益了,一起说说tomcat的线程模型还是收益比较大的。截止到8.0 tomcat支持的四种现场模型,

今天说说tomcat线程源码模型,想通过tomcat的线程源码的模型,老铁们可以熟悉关于连接的,高并发的一些配置。之前就是配置好了,就永久受益了,一起说说tomcat的线程模型还是收益比较大的。

『互联网架构』软件架构-tomcat之线程源码熟悉通信方式(上)(21)

Tomcat支持的四种线程模型的介绍

截止到8.0 tomcat支持的四种现场模型,

名称 描述
BIO 阻塞式IO,即Tomcat使用传统的java.io进行操作。该模式下每个请求都会创建一个线程,对性能开销大,不适合高并发场景。优点是稳定,适合连接数目小且固定架构。
NIO 非阻塞式IO,jdk1.4 之后实现的新IO。该模式基于多路复用选择器监测连接状态在通知线程处理,从而达到非阻塞的目的。比传统BIO能更好的支持并发性能。Tomcat 8.0之后默认采用该模式
APR 全称是 Apache Portable Runtime/Apache可移植运行库),是Apache HTTP服务器的支持库。可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作。使用需要编译安装APR 库
AIO 异步非阻塞式IO,jdk1.7后之支持 。与nio不同在于不需要多路复用选择器,而是请求处理线程执行完程进行回调调知,已继续执行后续操作。Tomcat 8之后支持。
  • BIO

    >tomcat6.0之前都是用的BIO,8.0是默认的BIO,传统的java IO来进行的其实就是socket。

*NIO

通过selector,通过请求过来分配给指定的线程,只是做读取。读取完成后立马就释放。通知客户端。读取和写入是分离的。检测是可读,可写。每个请求创建一个线程、tomcat并不是自己来做线程控制的。而是通过线程池的方式。目前使用高并发的模式,默认都是使用NIO。

  • APR

    tomcat可以通过JNI的方式安装APR这个库。linux安装 linux 版本的apache的库,windows安装windows版本的的apache的库。很多人都认为apache处理静态文件比tomcat要快。可能是之前了。现在速度基本都一样的。

  • AIO

    tomcat7之后产生的,因为NIO有select 其实就是多路复用选择器,AIO就没有

使用指定IO模型的配置方式:

配置 server.xml 文件当中的

修改即可。

默认配置 8.0 protocol=“HTTP/1.1” 8.0 之前是 BIO 8.0 之后是NIO

* BIO(一夫一妻,一个请求只干一个事情)

protocol=“org.apache.coyote.http11.Http11Protocol“
  • NIO(一夫多妻,一个请求被回收干多个事情)
protocol=”org.apache.coyote.http11.Http11NioProtocol“
  • AIO(不需要中间人了,一个线程处理完读丢给下一个线程来处理写)
protocol=”org.apache.coyote.http11.Http11Nio2Protocol“
  • APR
protocol=”org.apache.coyote.http11.Http11AprProtocol“

Tomcat BIO,NIO实现源码解析

之前应该都听过阻塞阻塞式BIO,非阻塞NIO。他们是如何实现的。他们的原理是什么?

同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写);

异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API);

阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回);

非阻塞 : 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞IO时,如果不能读写 Java 调用会马上返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)

Tomcat connector 并发参数解读

connector平常使用最多的,最大连接数,最大超时时间,连接包,

名称 描述
acceptCount 等待最大队列|
address 绑定客户端特定地址,127.0.0.1
bufferSize 每个请求的缓冲区大小。bufferSize * maxThreads
compression 是否启用文档
compressableMimeTypes text/html,text/xml,text/plain
connectionTimeout 客户发起链接 到 服务端接收为止,中间最大的等待时间
connectionUploadTimeout upload 情况下连接超时时间
disableUploadTimeout true 则使用connectionTimeout
enableLookups 禁用DNS查询 true
keepAliveTimeout 当长链接闲置 指定时间主动关闭 链接 ,前提是客户端请求头 带上这个 head”connection” ” keep-alive”
maxKeepAliveRequests 最大的 长连接数
maxHttpHeaderSize
maxSpareThreads BIO 模式下 最多线闲置线程数
maxThreads 最大执行线程数
minSpareThreads BIO 模式下 最小线闲置线程数

PS:NIO就是用最少的线程干最多的事情,BIO是找更多的人来干。都是要进行堵塞的,尤其是selector.select()方法上,跟bio的accept()一样,其实都在阻塞。比较单线程和多线程的处理方式,一般情况下无论哪种,nio模式都要比bio更优。

百度未收录

>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!

>>原文链接地址:上一篇:

已是最新文章


以上所述就是小编给大家介绍的《『互联网架构』软件架构-tomcat之线程源码熟悉通信方式(上)(21)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Message Service API Tutorial and Reference

Java Message Service API Tutorial and Reference

Hapner, Mark; Burridge, Rich; Sharma, Rahul / 2002-2 / $ 56.49

Java Message Service (JMS) represents a powerful solution for communicating between Java enterprise applications, software components, and legacy systems. In this authoritative tutorial and comprehens......一起来看看 《Java Message Service API Tutorial and Reference》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具