IO模型详解

IO模型详解,第1张

IO模型详解

IO模型:就是用什么样的通道进行数据的发送和接受,Java支持3种网络编程IO模式。

第一种:

BIO(Blocking IO)

同步阻塞模型,一个客户端连接对应一个处理线程

BIO模型图:

 

 优点:

程序简单,易于理解。

 缺点:

1.IO代码里面的accept *** 作是阻塞 *** 作,如果没有客户端连接,则会线程阻塞,浪费资源。

2.IO代码里面的read *** 作是阻塞 *** 作,如果连接的客户端一直没发送数据,则会线程阻塞,浪费资源。

3.如果线程很多,会造成服务器线程很多,压力很大,像c10k问题。

应用场景:

BIO 方式适用于连接数目比较小且固定的场景。

第二种:

NIO(Non Blocking IO)

同步非阻塞模型,服务器实现模式为一个线程可以处理多个请求,客户端发送的连接请求都会注册到多路复用器selector上,多路复用器轮询到连接有IO请求就进行处理。

NIO模型图:

 

NIO 有三大核心组件: Channel(通道), Buffer(缓冲区),Selector(多路复用器)

1、channel 类似于流,每个 channel 对应一个 buffer缓冲区,buffer 底层就是个数组

2、channel 会注册到 selector 上,由 selector 根据 channel 读写事件的发生将其交由某个空闲的线程处理

3、NIO 的 Buffer 和 channel 都是既可以读也可以写

NIO流程:

Java调用了 *** 作系统的内核函数来创建Socket,获取到Socket的文件描述符,再创建一个Selector对象,对应 *** 作系统的Epoll描述符,将获取到的Socket连接的文件描述符的事件绑定到Selector对应的Epoll文件描述符上,进行事件的异步通知,这样就实现了使用一条线程,并且不需要太多的无效的遍历,将事件处理交给了 *** 作系统内核( *** 作系统中断程序实现),大大提高了效率。

优点:

并发性高。

缺点:

程序的处理和处理IO相比更加复杂。

应用场景:

NIO方式适用于连接数目多且连接比较短(轻 *** 作)的场景, 比如聊天服务器, d幕系统, 服务器间通讯。

第三种:

AIO(NIO 2.0)

异步非阻塞, 由 *** 作系统完成后回调通知服务端程序启动线程去处理, 一般适用于连接数较多且连接时间较长的应用。

AIO模型图:

优点: 

并发性高、CPU利用率高、线程利用率高。

缺点:

不适合连接数目少且连接比较短的场景。

应用场景:

AIO方式适用于连接数目多且连接比较长(重 *** 作)的场景。

三种IO模型对比:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5564391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存