https://m.oschina.net/blog/132361

实现原理

说道实现原理,还要从操作系统的IO模型上了解

按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO,按照POSIX标准来划分只分为两类:同步IO和异步IO。如何区分呢?首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO,如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO。阻塞IO和非阻塞IO的区别在于第一步,发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO。

收到操作系统的IO模型,又不得不提select/poll/epoll/iocp,关于这四个的理解,不多做解释,自己还没理解到位。

可以理解的说明是:在Linux 2.6以后,java NIO的实现,是通过epoll来实现的,这点可以通过jdk的源代码发现。而AIO,在windows上是通过IOCP实现的,在linux上还是通过epoll来实现的。

这里强调一点:AIO,这是I/O处理模式,而epoll等都是实现AIO的一种编程模型;换句话说,AIO是一种接口标准,各家操作系统可以实现也可以不实现。在不同操作系统上在高并发情况下最好都采用操作系统推荐的方式。Linux上还没有真正实现网络方式的AIO。

同步IO包括:NIO\BIO

异步IO:AIO

BIO | NIO | AIO (Java版)相关推荐

  1. 也谈BIO | NIO | AIO (Java版--转)

    http://my.oschina.net/bluesky0leon/blog/132361 关于BIO | NIO | AIO的讨论一直存在,有时候也很容易让人混淆,就我的理解,给出一个解释: BI ...

  2. Java IO(BIO, NIO, AIO) 总结

    文章转载自:JavaGuide 目录 BIO,NIO,AIO 总结 同步与异步 阻塞和非阻塞 1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 ...

  3. Java的IO:BIO | NIO | AIO

    原文: http://my.oschina.net/bluesky0leon/blog/132361 BIO | NIO | AIO,本身的描述都是在Java语言的基础上的.而描述IO,我们需要从两个 ...

  4. java BIO/NIO/AIO 学习

    参考地址 https://www.cnblogs.com/diegodu/p/6823855.html 一.了解Unix网络编程5种I/O模型 1.1.阻塞式I/O模型 阻塞I/O(blocking ...

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

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

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

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

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

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

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

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

  9. JAVA IO : BIO NIO AIO

    JAVA IO : BIO NIO AIO 同步异步.阻塞非阻塞概念 同步与异步 阻塞与非阻塞 IO VS NIO VS AIO 面向流与面向缓冲 阻塞与非阻塞IO BIO.NIO.AIO的JAVA实 ...

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

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

最新文章

  1. 区块链技术入门,都涉及哪些编程语言?
  2. 5G 信令流程 — 5GC 的移动性管理(MM,Mobility Management)
  3. python银行排队系统_socket实现银行排队系统
  4. eclipse怎样在线安装hibernate tools插件并使用
  5. 视觉SLAM总结——SVO中关键知识点总结
  6. NOI 1.13编程基础之综合应用 45十进制到八进制
  7. 函数局部有界性定理_数学分析第四章《函数连续性》备考指南
  8. 在asp.net2.0中使用存储过程
  9. anaconda安装numpy_Python3.8如何安装Numpy
  10. markdown写作技巧
  11. 从零基础入门Tensorflow2.0 ----八、41. estimator分布式实战
  12. linux同时连接内外网的设置
  13. matlab 删除一个文件,【MATLAB】Matlab删除文件或者文件
  14. Android WiFi热点监听
  15. 7步走!做出高质量的数据分析项目
  16. 百度搜索结果页面的参数 搜索历史记录(rsv_sug)
  17. Godot Engine:选择Skeleton节点时出现不停输出“object was deleted while awaiting a callback”并死机问题
  18. MapX学习基本教程
  19. matlab动态神经网络进行时间序列预测分析
  20. 第一周,人工智能学习总结

热门文章

  1. 1.10 Linux文件目录用户与用户组修改
  2. 1.1 Linux系统概述、安装与体验
  3. 二分法08:寻找旋转排序数组中的最小值
  4. python类:class创建、数据方法属性及访问控制(下划线)
  5. qtscrcpy自定义按键_操作更简单的QtScrcpy
  6. vue 异步更新队列 Vue.nextTick(callback)
  7. Futter基础第18篇: 实现调用原生时间选择器、日期选择器、时间戳、Future异步
  8. Futter基础第12篇: 实现TabController定义顶部tab切换,并介绍生命周期函数
  9. 暑假集训 || 线段树
  10. 用于确定两个字符串最长公共子串的函数