软件架构-tomcat之线程源码熟悉通信方式(上)
Posted IT架构圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件架构-tomcat之线程源码熟悉通信方式(上)相关的知识,希望对你有一定的参考价值。
今天说说tomcat线程源码模型,想通过tomcat的线程源码的模型,老铁们可以熟悉关于连接的,高并发的一些配置。之前就是配置好了,就永久受益了,一起说说tomcat的线程模型还是收益比较大的。
Tomcat支持的四种线程模型的介绍(一)
截止到8.0 tomcat支持的四种现场模型,
•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“
protocol=”org.apache.coyote.http11.Http11Nio2Protocol“
protocol=”org.apache.coyote.http11.Http11AprProtocol“
Tomcat BIO,NIO实现源码解析(三)
之前应该都听过阻塞阻塞式BIO,非阻塞NIO。他们是如何实现的。他们的原理是什么?
同步 :自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写);
阻塞 :ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回);
非阻塞 :柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞IO时,如果不能读写Java调用会马上返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)
Tomcat connector 并发参数解读(四)
connector平常使用最多的,最大连接数,最大超时时间,连接包,
PS:NIO就是用最少的线程干最多的事情,BIO是找更多的人来干。都是要进行堵塞的,尤其是selector.select()方法上,跟bio的accept()一样,其实都在阻塞。比较单线程和多线程的处理方式,一般情况下无论哪种,nio模式都要比bio更优。
以上是关于软件架构-tomcat之线程源码熟悉通信方式(上)的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-38]:目标系统 - 系统软件 - Linux OS硬件设备驱动必须熟悉的六大工作机制之(并发与互斥阻塞与非阻塞异步通知)