关于NIO的理解

在说NIO之前,首先要清楚几个概念:

1. 同步/异步:通俗来说,同步或异步的主要区别点是,IO操作的主体是谁。

同步,我们的应用程序(代码)是直接参与IO操作,直到数据准备就绪;或者采用轮询的方式实时检查数据的状态,如果数据准备就绪就获取数据。

异步,是由操作系统进行所有的IO操作,我们程序不需要关心IO操作是怎么进行的,当操作系统完成IO操作之后,给我们的程序发送通知,我们直接拿走数据即可。

2. 阻塞/非阻塞:主要区别是在数据没有准备好时,此线程会不会一直处于等待状态,直到数据准备就绪。

阻塞,当某一线程进行IO操作,此线程会一直等待操作完成,而不能去做其他的事情。

非阻塞,线程不会一直等待着某一个IO操作完成,而是IO操作完成之后,直接去取数据。


NIO(同步非阻塞IO):

NIO三大组件: 1.channel(进行读写操作)

                         2.selector(相当于一个管家,轮询检查数据的就绪状态)

                         3.buffer(读取数据的缓冲)

NIO,采用多路复用IO模型,改善了传统IO对线程资源的消耗,将channel注册在selector上,通过selecotor轮询检查数据的就绪状态,一旦有数据准备好,会通知channel去取数据。当多个客户端连接时,并不是为每个客户端创建一个线程为其服务,而是通过注册的方式,当有客户端准备好数据时,再去取数据。

NIO模型

需要注意的是,同步非阻塞IO是读写方法非阻塞,select收到IO准备就绪的状态,还是需要用户自己进行读写操作。NIO围绕ByteBuffer进行读写操作,通过不断检查ByteBuffer的状态来判断IO操作是否完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值