ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【转】BIO,NIO和AIO

2022-06-21 09:34:18  阅读:159  来源: 互联网

标签:BIO NIO buffer AIO 线程 连接 channel


本文转自:https://blog.csdn.net/qxy_1218/article/details/123941039

BIO,NIO和AIO是Java网络编程的三种模型

BIO:同步并阻塞,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理。如果连接多了,线程数量不够,就只能等待,即会发生阻塞。

NIO:同步非阻塞,服务实现模式是一个线程可以处理多个连接,即客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有I/O请求就处理

AIO:异步非阻塞,引入了异步通道,采用的是proactor模式,特点是:有效的请求才启动线程,先有操作系统完成在通知服务端

应用场景:

BIO:适用连接数目比较小且固定的架构,对服务器要求比较高,并发局限于应用中

NIO:适用连接数目多且连接比较短的架构,如:聊天服务器,弹幕系统等,编程比较复杂

AIO:适用连接数目多且连接长的架构,如相册服务器

BIO和NIO的区别

1.BIO主要是以I/O流的形式处理数据;NIO以I/O块(buffer)的形式处理数据,效率:块>流

2.BIO是阻塞的,NIO是非阻塞的

3.BIO主要是以字节流和字符流操作,NIO是基于channel(通道)、buffer(缓冲区)操作的;selector(选择器)是用来监听channel的

4.BIO是单向的,要么是输入流要么是输出流,NIO是双向的,可以从channel往buffer读写数据,同时buffer也可以向channel读写数据

NIO的三大核心流程图

 

selector(选择器),channel(通道),buffer(缓冲区)

从图可以看出,一个线程对应selector,selector对应三个channel,channel又对应buffer(双向)。程序切换到哪个channel取决于event事件决定,selector会根据事件去切换channel。

buffer是一个内存块,底层有一个数组

标签:BIO,NIO,buffer,AIO,线程,连接,channel
来源: https://www.cnblogs.com/tortoise512/p/16395689.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有