Nio (what why how)

 

1what

是Java1. 4 开始引入的一种新I/O(API)

 

 

2why

通过使用非阻塞型I/O(Nio),不要求阻塞等待I/O 操作完成即可返回,从而减少了管理I/O 连接导致的系统开销,实现流畅的网络读写操作大幅度提高了系统性能

 

 

3how

工作原理

针对传统I/O 工作模式的不足,NIO 工具包提出了基于Buffer(缓冲区)、Channel(通
道)、Selector(选择器)的新模式、Selector(选择器)、可选择的Channel(通道)和

SelectionKey(选择键)配合起来使用,可以实现并发的非阻塞型I/O 能力。

 

4Nio工具包的成员

 Buffer(缓冲器)

的核心是一块内存区,可以直接对其执行与内存有关的操作,利用操作系统特性和能力提高和改善Java 传统I/O 的性能。

 

Channel(通道)

被认为是NIO 工具包的一大创新点,是(Buffer)缓冲器和I/O 服务之间的通道,具有双向性,既可以读入也可以写出,可以更高效的传递数据

 

Selector(选择器)和SelectionKey(选择键)

Selector 是实现并发型非阻塞I/O 的核心,各种可选择的通道将其感兴趣的事件注册
到Selector 对象上,Selector 在一个循环中不断轮循监视这各些注册在其上的Socket 通道。
SelectionKey 类则封装了SelectableChannel 对象在Selector 中的注册信息。当Selector 监测
到在某个注册的SelectableChannel 上发生了感兴趣的事件时,自动激活产生一个SelectionKey
对象,在这个对象中记录了哪一个SelectableChannel 上发生了哪种事件,通过对被激活的
SelectionKey 的分析,外界可以知道每个SelectableChannel 发生的具体事件类型,进行相应的

处理。

 

5传统的阻塞型网络 I/O的不足

 Java 平台传统的I/O 系统都是基于Byte(字节)和Stream(数据流)的,相应的I/O 操

作都是阻塞型的,所以服务器程序也采用阻塞型I/O 进行数据的读、写操作。为了实现服

务器程序的并发性要求,系统由一个单独的主线程来监听用户发起的连接请求,一直处于阻塞状态;

当有用户连接请求到来时,程序都会启一个新的线程来统一处理用户数据的读、写操作。

 

这种模式的优点是简单、实用、易管理;然而缺点也是显而易见的:由于是为每一个客
户端分配一个线程来处理输入、输出数据,其线程与客户机的比例近似为1:1,随着线程
数量的不断增加,服务器启动了大量的并发线程,会大大加大系统对线程的管理开销,这将
成为吞吐量瓶颈的主要原因;其次由于底层的I/O 操作采用的同步模式,I/O 操作的阻塞管

理粒度是以服务于请求的线程为单位的,有可能大量的线程会闲置,处于盲等状态,造成I/O
资源利用率不高,影响整个系统的性能。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值