1、BIO

概念:

BIO是一种同步阻塞I/O模式,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理。

存在的问题:

一旦有高并发的大量请求,就会有如下问题: 1)线程不够用,就算使用了线程池复用线程也无济于事;2)阻塞I/O模式下,会有大量的线程被阻塞,一直在等待数据,这个时候的线程被挂起,只能干等,CPU利用率很低,换句话说,系统的吞吐量差;3)如果网络I/O堵塞或者有网络抖动或者网络故障等,线程的阻塞时间可能很长,整个系统也变的不可靠;4)服务器线程太多,压力太大,导致服务器宕机。

2、NIO

概念

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

处理过程如下:

1)一个客户端会对应一个channel,然后多路复用器selector会轮询channel;

2)然后当有请求过来的时候,selector才会去创建工作线程与buffer;

3)工作线程会通过buffer从channel中读取请求并进行处理,此时客户端可以进行其他操作,所以是非阻塞的;

4)然后处理完成后再通过buffer将数据返回给channel,客户端会当请求读写完成后会释放这个线程。

3、AIO

AIO 也就是 NIO 2。在 Java 7 中引⼊了 NIO 的改进版 NIO 2,它是异步非阻塞的 IO 模型。异步 IO 是基于事件和回调机制实现的,也就是应⽤操作之后会直接返回,不会堵塞在那⾥,当后台处理完成,操作系统会通知相应的线程进⾏后续的操作。AIO 是异步 IO 的缩写,虽然 NIO 在⽹络操作中,提供了⾮阻塞的方法,但是 NIO 的 IO 行为还是同步的。对于 NIO 来说,我们的业务线程是在 IO 操作准备好时,得到通知,接着就由这个线程自进行 IO 操作,IO 操作本身是同步的,但AIO是异步非阻塞的,也就是说当有请求过来的时候,工作线程会通知操作系统异步去读,然后就可以去干别的事,等操作系统完成数据读取之后,就会回调接口,给你操作系统异步读完的数据。

BIO,NIO,AIO分别是什么?他们有什么区别?相关推荐

  1. java mysql aio_Java中的NIO,BIO,AIO分别是什么

    Java中的NIO,BIO,AIO分别是什么 BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开 ...

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

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

  3. 【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...

    网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...

  4. 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章

    来源:编程新说 网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTT ...

  5. cpu 被挂起和阻塞_迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章...

    网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...

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

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

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

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

  8. IO模式-BIO,NIO,AIO

    目前常用的3种IO模式:分别是BIO.NIO和AIO. BIO BIO 全称Block-IO 是一种同步且阻塞的通信模式.是一个比较传统的通信方式,模式简单,使用方便.但并发处理能力低,通信耗时,依赖 ...

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

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

  10. 什么是BIO | NIO | AIO

    在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步 ...

最新文章

  1. jQuery选择器总结
  2. python xpath语法-python中使用XPath笔记
  3. linux系统UDP的socket通信编程
  4. HDU1495 非常可乐
  5. oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...
  6. 注册docker hub账号
  7. border-box
  8. BZOJ1345 [Baltic2007]序列问题Sequence
  9. GPS 实景识别网络搭建项目(源码免费领取)
  10. 剑指offer(C++)-JZ77:按之字形顺序打印二叉树(数据结构-树)
  11. 报文分析4、TCP协议的头结构
  12. matlab prn文件,PRN格式文件 如何打开PRN文件 PRN是什么格式的文件 用什么打开 - The X 在线工具...
  13. XML解析之 MSXML应用总结 概念篇
  14. 项目过程管理(二)工具与流程
  15. java项目 无法重命名_重命名项不起作用
  16. python相关性分析模型,相关性分析原理及Python实战
  17. 简述docx文档格式-CTF竞赛专用
  18. C++-网络库:Poco概述【开源的C++类库的集合】【提供简单的、快速的网络和可移植应用程序的C++开发】【和C++标准库可以很好的集成并填补C++标准库的功能空缺】【适合嵌入式开发】
  19. day06 记账程序01
  20. cfd计算机辅助技术,CFD仿真在生物医学领域拯救生命

热门文章

  1. ActivePerl+zlib+OpenSSL+libssh2+curl编译(windows)
  2. ADM100学习笔记
  3. python数据可视化——plt.plot()
  4. 一文速学数模-时序预测模型(一)灰色预测一文详解+Python实例代码
  5. html做空白简历,第二天:给自己做一个在线简历吧-IFE
  6. 数据分析见解-数据异常波动
  7. 3dMax文件打开时间长怎么办
  8. php打印插件_PHP打印页面
  9. Netty学习十四:内存管理之Recycler 对象池
  10. 自己做的网站--新农合医药网