BIO | NIO | AIO (Java版)
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版)相关推荐
- 也谈BIO | NIO | AIO (Java版--转)
http://my.oschina.net/bluesky0leon/blog/132361 关于BIO | NIO | AIO的讨论一直存在,有时候也很容易让人混淆,就我的理解,给出一个解释: BI ...
- Java IO(BIO, NIO, AIO) 总结
文章转载自:JavaGuide 目录 BIO,NIO,AIO 总结 同步与异步 阻塞和非阻塞 1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 ...
- Java的IO:BIO | NIO | AIO
原文: http://my.oschina.net/bluesky0leon/blog/132361 BIO | NIO | AIO,本身的描述都是在Java语言的基础上的.而描述IO,我们需要从两个 ...
- java BIO/NIO/AIO 学习
参考地址 https://www.cnblogs.com/diegodu/p/6823855.html 一.了解Unix网络编程5种I/O模型 1.1.阻塞式I/O模型 阻塞I/O(blocking ...
- java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别
到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...
- Java常见面试题:BIO,NIO,AIO 有什么区别?
Java 中 IO 流分为几种? 按功能来分:输入流(input).输出流(output). 按类型来分:字节流和字符流. 字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流 ...
- Java中IO流的分类和BIO,NIO,AIO的区别
到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...
- IO之 java中BIO NIO AIO原理、区别以及应用
在本篇文章中,我们主要介绍一下java中的BIO NIO AIO,重点是NIO 先说一下同步.异步.阻塞和非阻塞. 简单来讲,同步和异步是针对内核和应用程序之间的交互而言的:阻塞和非阻塞其实是针对进程 ...
- JAVA IO : BIO NIO AIO
JAVA IO : BIO NIO AIO 同步异步.阻塞非阻塞概念 同步与异步 阻塞与非阻塞 IO VS NIO VS AIO 面向流与面向缓冲 阻塞与非阻塞IO BIO.NIO.AIO的JAVA实 ...
- Java的IO流 ,BIO NIO AIO 的区别?
目录 1.在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别: 2.BIO NIO AIO 分别代表什么?(面试简答): 3.BIO和NIO.AIO的区别: 4.java中io流的分类: • ...
最新文章
- 区块链技术入门,都涉及哪些编程语言?
- 5G 信令流程 — 5GC 的移动性管理(MM,Mobility Management)
- python银行排队系统_socket实现银行排队系统
- eclipse怎样在线安装hibernate tools插件并使用
- 视觉SLAM总结——SVO中关键知识点总结
- NOI 1.13编程基础之综合应用 45十进制到八进制
- 函数局部有界性定理_数学分析第四章《函数连续性》备考指南
- 在asp.net2.0中使用存储过程
- anaconda安装numpy_Python3.8如何安装Numpy
- markdown写作技巧
- 从零基础入门Tensorflow2.0 ----八、41. estimator分布式实战
- linux同时连接内外网的设置
- matlab 删除一个文件,【MATLAB】Matlab删除文件或者文件
- Android WiFi热点监听
- 7步走!做出高质量的数据分析项目
- 百度搜索结果页面的参数 搜索历史记录(rsv_sug)
- Godot Engine:选择Skeleton节点时出现不停输出“object was deleted while awaiting a callback”并死机问题
- MapX学习基本教程
- matlab动态神经网络进行时间序列预测分析
- 第一周,人工智能学习总结
热门文章
- 1.10 Linux文件目录用户与用户组修改
- 1.1 Linux系统概述、安装与体验
- 二分法08:寻找旋转排序数组中的最小值
- python类:class创建、数据方法属性及访问控制(下划线)
- qtscrcpy自定义按键_操作更简单的QtScrcpy
- vue 异步更新队列 Vue.nextTick(callback)
- Futter基础第18篇: 实现调用原生时间选择器、日期选择器、时间戳、Future异步
- Futter基础第12篇: 实现TabController定义顶部tab切换,并介绍生命周期函数
- 暑假集训 || 线段树
- 用于确定两个字符串最长公共子串的函数