同步IO Java自己处理IO读写
异步IO Java将IO读写委托给OS处理
阻塞 Java调用时阻塞 则等待直到IO读写完成后返回
非阻塞 Java调用时阻塞 则马上返回 IO事件分发器轮询查询为可读写状态时继续IO读写
-
同步并阻塞&异步阻塞 BIO
网购付款完毕时 只能等待快递员送货 等待货物到后跑去取快递 无法处理其它事情一个连接一个线程 客户端有连接请求时服务器端就创建一个线程进行处理 但连接不做任何操作时会造成不必要的线程资源浪费可通过线程池机制改善
BIO适用连接数目比较小且固定的架构 对服务器资源要求比较高 并发局限于应用中 程序直观
-
同步非阻塞 NIO
网购付款完毕时 用手机反复查询物流 等待货物到后跑去取快递 可同时处理其它事情一个请求一个线程 客户端有连接请求会先注册到多路复用器上 多路复用器轮询到连接有I/O请求时才启动一个线程进行处理
NIO适用连接数目多且连接比较短的架构 并发局限于应用中 JDK1.4开始支持 程序复杂不直观
-
异步非阻塞 AIO
网购付款完毕时 自动送货上门 不用自己去取货 可处理其它事情一个有效请求一个线程 客户端的I/O请求由OS处理完成后通知服务器应用去启动线程进行处理 需要操作系统支持
AIO适用连接数目多且连接比较长的架构 调用OS进行并发操作 JDK7开始支持 程序复杂不直观
Tomcat运行模式
BIO blocking I/O | NIO non-blocking I/O | APR Apache Portable Runtime |
---|---|---|
同步阻塞式 | 同步非阻塞式 异步阻塞 | 异步非阻塞 |
java.io包及其子包 | java.nio包及其子包 | 需要安装外部程序 |
传统读写操作 | 基于缓冲区 多路复用 | JNI调用server支持库 |
Tomcat默认使用 | Tomcat修改配置 | 需安装apr和native |
JDK1.4后提供 | JDK7后提供 | Apache提供 |
使Tomcat以NIO方式运行 配置apache-tomcat/conf/server.xml
<Connector connectionTimeout="20000" port="8080"
protocol="HTTP/1.1"
redirectPort="8443"/>
修改后
<Connector connectionTimeout="20000" port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
redirectPort="8443"/>
使Tomcat以APR方式运行
Windows下修改
# 下载native.dll 地址http://tomcat.apache.org/download-native.cgi
# 复制32位或64位tcnative-1.dll到tomcat\bin
<Connector connectionTimeout="20000" port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
redirectPort="8443"/>
# 重启tomcat即可
Linux下修改
# 下载apr和native并配置server.xml
下载地址:http://apr.apache.org/download.cgi
# 可直接点击下载
下载apr:http://mirrors.cnnic.cn/apache//apr/apr-1.6.5.tar.gz
下载apr-util:http://mirrors.cnnic.cn/apache//apr/apr-util-1.6.1.tar.gz
下载apr-iconv:http://mirrors.cnnic.cn/apache//apr/apr-iconv-1.2.2.tar.gz
apr-1.6.5.tar.gz
apr-util-1.6.1.tar.gz
apr-iconv-1.2.2.tar.gz
# 在tomcat/bin下
tomcat-native.tar.gz
[root@lilei ~]# tar zxvf apr-1.6.5.tar.gz
[root@lilei ~]# tar zxvf apr-util-1.6.1.tar.gz
[root@lilei ~]# tar zxvf apr-iconv-1.2.2.tar.gz
[root@lilei ~]# cd apr-1.6.5
[root@lilei ~]# ./configure --prefix=/usr/local/apr-1.6.5 && make && make install
[root@lilei ~]# cd apr-iconv-1.2.2
[root@lilei ~]# ./configure --prefix=/usr/local/apr-iconv-1.2.2 --with-apr=/usr/local/apr-1.6.5 && make && make install
[root@lilei ~]# cd apr-util-1.6.1
[root@lilei ~]# ./configure --prefix=/usr/local/apr-util-1.6.1 --with-apr=/usr/local/apr-1.6.5 --with-iconv=/usr/local/apr-iconv-1.2.2 && make && make install
[root@lilei ~]# cd /usr/local/tomcat-7.0.67/bin/
[root@lilei bin]# tar zxvf tomcat-native.tar.gz
[root@lilei bin]# cd tomcat-native-1.1.33-src/jni/native/
# --with-apr apr的安装目录 安装apr自动生成的 不用修改 --with-java jdk目录
[root@lilei native]# ./configure --with-apr=/usr/local/apr-1.6.5 --with-java=/usr/local/jdk1.8.0_162
[root@lilei native]# make && make install
# 配置环境变量
[root@lilei native]# vim /etc/profile# 加入如下配置
export LD_LIBRARY_PATH=/usr/local/apr-1.6.5/lib
[root@lilei native]# source /etc/profile
[root@node3 conf]# tailf ../logs/catalina.out
# 解压并安装
tar -zxvf apr-1.6.5.tar.gz
cd apr-1.6.5
./configure
make && make install
tar -zxvf tomcat-native.tar.gz
cd tomcat-native-1.2.27-src/native/
./configure --with-apr=/usr/local/apr --with-java-home=/usr/local/java/jdk1.8.0_162
make && make install
--with-apr apr的安装目录 安装apr自动生成的 不用修改
--with-java-home Jdk目录
#配置环境变量
vim /etc/profile 添加如下配置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
#重载配置文件
source /etc/profile
修改server.xml
<Connector connectionTimeout="20000" port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
redirectPort="8443"/>
BIO模式运行>>>INFO: Initializing ProtocolHandler [“http-bio-8080”]
NIO模式运行>>>INFO: Initializing ProtocolHandler [“http-nio-8080”]
APR模式运行>>>INFO: Initializing ProtocolHandler [“http-apr-8080”]