【图灵学院15】极致优化-高性能网络编程之BIO与NIO区别

一、Java IO概念

1.  一个http请求节点

  数据传输

1)网络传输

  TCP、UDP

2)通信模型

  BIO、NIO、AIO

  数据处理

3)应用协议

  HTTP、RMI、WEBSERVICE、Redis、JMS

4)序列化协议

  JSON、javaobject、Hession

5)业务处理

  servlet

二、BIO、NIO性能上的差异

在同样的请求下,BIO与NIO不同线程数来支撑。

  推断 请求数 线程数
BIO 请求越多,支持的线程也越多?错误  300  400
NIO  支持的线程不会随着请求的增加而暴增  300  163

BIO:

NIO:同步非阻塞,协调员(多路复用器)

Tomcat同步阻塞式BIO通信模型:

http-bio-Acceptor

ServerSocket.accept()

读取写入,导致阻塞。

阻塞:表示在网络传输或者业务处理过程中的阻塞,指创建新线程、网络传输过程、业务处理过程中的阻塞。

 建立连接、写入、读取 ----->同一个线程 

Tomcat伪异步阻塞式IO通信模型:

管理线程生命周期、重复利用线程、任务队列管理

Acceptor->封装提交Task->线程池->分配Work线程

 建立连接----->同一个线程

写入----->同一个线程

读取 ----->同一个线程 

三、通信模型

四、BIO、NIO具体的示例

C10K问题

原文地址:https://www.cnblogs.com/yeahwell/p/7632816.html