BIO,NIO,AIO有什么区别?

1.BIO(Blocking I/O):

概念

同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。也就说一个连接一个线程,而且无论客户端是否有数据,这边线程也会在这里傻等,给服务端添加麻烦,因为多一个线程就要多一些切换,创建,销毁等操作。

何时阻塞

在服务端等待连接(连接阻塞,accept())与读客户端来的数据会阻塞(读阻塞,read())。


服务端的操作:

1.通过ServerSocket注册端口

2.服务端通过调用accept方法用于监听客户端的Socket请求。阻塞操作

3.从Socket中获取字节输入或者输出流进行数据的读写操作。阻塞操作

客户端的操作:

1.通过Socket对象请求与服务端的连接

2.从Socket中得到字节输入或者是字节输出流进行数据的读写操作。

2.  NIO(Non-Blocking/New I/O):

概念:

同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理。轮询访问每个通道,如果通道没有数据,是不会一直等待的。

NIO有三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择器)

通俗来说,NIO是可以用一个线程处理多个操作。假设有1000个请求,根据实际情况,可以分配20或30线程来处理。不像之前的阻塞IO那样,非得分配1000个。

对比BIO的阻塞地方,NIO为什么不阻塞:

阻塞的原因:socket是阻塞的

3. BIO与NIO的比较

1. BIO是以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O高很多

2. BIO是阻塞的,NIO则是非阻塞的(通道没有数据,是不用管的)

3.BIO基于字节流和字符流进行操作,而NIO基于Channel(通道)和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据达到等),因此使用单个线程就可以监听到多个客户端通道。

4.AIO(Asynchronous I/O):

AIO也就是NIO 2.0 版本。它是异步非阻塞的IO模型。异步IO是基于事件和回调机制实现的,也就是说客户端的I/O请求都是由操作系统先完成后再去通知服务器应用去启动线程进行处理。

5.应用场景

1.BIO适用于连接数小,对服务器资源要求高,因为线程要开很多。

2.NIO适合于连接数多且数据连接比较短的架构,比如聊天服务器,弹幕系统等

3.AIO适用于连接数多且连接比较长的架构。充分调用操作系统参与并发操作。

BIO/NIO/AIO的区别及应用场景相关推荐

  1. java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  2. Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  3. Java的IO流 ,BIO NIO AIO 的区别?

    目录 1.在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别: 2.BIO NIO AIO 分别代表什么?(面试简答): 3.BIO和NIO.AIO的区别: 4.java中io流的分类: •  ...

  4. BIO ,NIO,AIO的区别

    IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSock ...

  5. java nio 李林峰_浅谈Java中BIO、NIO和AIO的区别和应用场景

    最近一直在准备面试,为了使自己的Java水平更上一个档次,拜读了李林峰老师的<Netty权威指南>,了解了Java关于IO的发展和最新的技术,真是受益匪浅,现在把我总结的关于BIO.NIO ...

  6. IO之 java中BIO NIO AIO原理、区别以及应用

    在本篇文章中,我们主要介绍一下java中的BIO NIO AIO,重点是NIO 先说一下同步.异步.阻塞和非阻塞. 简单来讲,同步和异步是针对内核和应用程序之间的交互而言的:阻塞和非阻塞其实是针对进程 ...

  7. Java中nio、bio和aio的区别

    前言:IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO.现在使用NIO的场景越来越多,很多网上的技术框架或多或少用到了NIO技术,譬如Tomcat.Jetty,还有基于 ...

  8. Java常见面试题:BIO,NIO,AIO 有什么区别?

    Java 中 IO 流分为几种? 按功能来分:输入流(input).输出流(output). 按类型来分:字节流和字符流. 字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流 ...

  9. IO: BIO ? NIO ? AIO?

    IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSock ...

  10. 内核aio_今天来说说令人让人傻傻分不清的BIO,NIO,AIO

    | 作者:新一. | 简书:https://www.jianshu.com/u/b3263fc54bce | 知乎:https://www.zhihu.com/people/qing-ni-chi-y ...

最新文章

  1. 视图函数中进行sql查询,防止sql注入
  2. Spring Security 实战:使用 JWT 认证访问接口
  3. 数据库操作技术--Spring jdbcTemplate
  4. C指针原理(33)-Ncurses-文本终端的图形
  5. 快速问医生如何快速实现 患者与医生即时问诊?
  6. php中update语句修改多个字段,Myabtis中批量更新update多字段
  7. python xml etree_python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别和基本使用...
  8. NB-IoT(9)---云平台对接及使用
  9. tcp协议和三次握手
  10. foreman架构的引入3-安装Foreman1.5.3架构(all-in-one)
  11. Fiddler中文乱码
  12. 信息安全体系建设(一)
  13. 用html制作一个中国高铁网页,行者|终于有人制作了一张靠谱的全国高铁地图!...
  14. YUV和RGB格式分析
  15. 电脑版微信每天自动发送
  16. [转]XXX无法访问。你可能没有权限使用网络资源
  17. 针式打印机设置自定义纸张大小
  18. xmanager5链接linux配置,xmanager连接linux5的方法
  19. nestjs中生成uuid
  20. VUE 查找数组中符合条件的对象

热门文章

  1. linux命令比较命令,Linux命令 比较文件
  2. wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
  3. azure mysql无法连接_java - 无法从Azure的JAVA功能连接到Azure的MySQL数据库 - SO中文参考 - www.soinside.com...
  4. 清理数据_Python数据清理终极指南(2020版)
  5. python linux系统管理与自动化运维pdf_Python Linux系统管理与自动化运维 完整pdf扫描版[191MB]...
  6. NYOJ 42一笔画问题||欧拉图
  7. apache php的权限,Unix上的Apache PHP写权限
  8. STM32——库函数流水灯程序
  9. java的hbox,Java HBox.setPrefHeight方法代码示例
  10. 考研南邮和杨大计算机,江苏省这4所“非211”低调有实力,从不争名次,毕业生颇受欢迎...