java nio简介

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 的结构:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值