1:基本概念
io是主存与外部设备拷贝数据的过程。io是操作系统底层功能实现 底层通过IO指令进行数据操作 所有语言运行时系统都会提供较高的工具类
2 java标准IO回顾;
java中提供有基本的io操作 基于本地方法的实现 我们则无需关注底层操作 inputstream跟outputstream(字节流) read、write字符流等等。
3NIO简介
其实就是 java new io的缩写,主要功能如下:
-为所有的原始类型提供buffer缓存支持。
-字符集编码解码方案
-channel一个新的IO抽象
-支持锁和内存映射文件的文件访问接口。
–提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 。
4. Buffer&Chanel
channel跟buffer是NIO中2个经常用到的数据抽象 基本的数据抽象。
buffer是一块连续的内存,是nio数据读跟写的中转地
channel数据的源头或者目的地 用于向buffer提供数据 或者buffer读取数据的唯一接口
异步IO支持
一个buffer主要有这3个组成 位置position 最大容量limit capacity容量
5 非阻塞 IO
关于非阻塞 IO 将从何为阻塞、何为非阻塞、非阻塞原理和异步核心 API 几个方面来理解。
何为非阻塞?
下面有个隐喻:
一辆从 A 开往 B 的公共汽车上,路上有很多点可能会有人下车。司机不知道哪些点会有哪些人会下车,对于需要下车的人,如何处理更好?
1. 司机过程中定时询问每个乘客是否到达目的地,若有人说到了,那么司机停车,乘客下车。 ( 类似阻塞式 )
2. 每个人告诉售票员自己的目的地,然后睡觉,司机只和售票员交互,到了某个点由售票员通知乘客下车。 ( 类似非阻塞 )
很显然,每个人要到达某个目的地可以认为是一个线程,司机可以认为是 CPU 。在阻塞式里面,每个线程需要不断的轮询,上下文切换,以达到找到目的地的结果。而在非阻塞方式里,每个乘客 ( 线程 ) 都在睡觉 ( 休眠 ) ,只在真正外部环境准备好了才唤醒,这样的唤醒肯定不会阻塞。
非阻塞的原理
把整个过程切换成小的任务,通过任务间协作完成。
由一个专门的线程来处理所有的 IO 事件,并负责分发。
事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的进程切换。
以下是异步 IO 的结构:
io是主存与外部设备拷贝数据的过程。io是操作系统底层功能实现 底层通过IO指令进行数据操作 所有语言运行时系统都会提供较高的工具类
2 java标准IO回顾;
java中提供有基本的io操作 基于本地方法的实现 我们则无需关注底层操作 inputstream跟outputstream(字节流) read、write字符流等等。
3NIO简介
其实就是 java new io的缩写,主要功能如下:
-为所有的原始类型提供buffer缓存支持。
-字符集编码解码方案
-channel一个新的IO抽象
-支持锁和内存映射文件的文件访问接口。
–提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 。
4. Buffer&Chanel
channel跟buffer是NIO中2个经常用到的数据抽象 基本的数据抽象。
buffer是一块连续的内存,是nio数据读跟写的中转地
channel数据的源头或者目的地 用于向buffer提供数据 或者buffer读取数据的唯一接口
异步IO支持
一个buffer主要有这3个组成 位置position 最大容量limit capacity容量
5 非阻塞 IO
关于非阻塞 IO 将从何为阻塞、何为非阻塞、非阻塞原理和异步核心 API 几个方面来理解。
何为非阻塞?
下面有个隐喻:
一辆从 A 开往 B 的公共汽车上,路上有很多点可能会有人下车。司机不知道哪些点会有哪些人会下车,对于需要下车的人,如何处理更好?
1. 司机过程中定时询问每个乘客是否到达目的地,若有人说到了,那么司机停车,乘客下车。 ( 类似阻塞式 )
2. 每个人告诉售票员自己的目的地,然后睡觉,司机只和售票员交互,到了某个点由售票员通知乘客下车。 ( 类似非阻塞 )
很显然,每个人要到达某个目的地可以认为是一个线程,司机可以认为是 CPU 。在阻塞式里面,每个线程需要不断的轮询,上下文切换,以达到找到目的地的结果。而在非阻塞方式里,每个乘客 ( 线程 ) 都在睡觉 ( 休眠 ) ,只在真正外部环境准备好了才唤醒,这样的唤醒肯定不会阻塞。
非阻塞的原理
把整个过程切换成小的任务,通过任务间协作完成。
由一个专门的线程来处理所有的 IO 事件,并负责分发。
事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的进程切换。
以下是异步 IO 的结构: