内容简介:今天说说tomcat线程源码模型,想通过tomcat的线程源码的模型,老铁们可以熟悉关于连接的,高并发的一些配置。之前就是配置好了,就永久受益了,一起说说tomcat的线程模型还是收益比较大的。截止到8.0 tomcat支持的四种现场模型,
今天说说tomcat线程源码模型,想通过tomcat的线程源码的模型,老铁们可以熟悉关于连接的,高并发的一些配置。之前就是配置好了,就永久受益了,一起说说tomcat的线程模型还是收益比较大的。
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模型的配置方式:
修改即可。
默认配置 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)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Redis单线程架构
- 『互联网架构』软件架构-netty线程模型源码(55)
- Redis 破障之路(三):Redis 单线程架构
- 『互联网架构』软件架构-io与nio线程模型reactor模型(上)(53)
- 『互联网架构』软件架构-io与nio线程模型reactor模型(下)(54)
- 阿里java架构师面试128题含答案:分布式架构+Dubbo+多线程+Redis
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning PHP and MySQL 5
W. Jason Gilmore / Apress / 2006-01-23 / USD 44.99
Beginning PHP and MySQL 5: From Novice to Professional, Second Edition offers comprehensive information about two of the most prominent open source technologies on the planet: the PHP scripting langua......一起来看看 《Beginning PHP and MySQL 5》 这本书的介绍吧!