栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

IO模型详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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方式适用于连接数目多且连接比较短(轻操作)的场景, 比如聊天服务器, 弹幕系统, 服务器间通讯。

第三种:

AIO(NIO 2.0)

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

AIO模型图:

优点: 

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

缺点:

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

应用场景:

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

三种IO模型对比:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号