139°

java NIO

特点

1.No -Blocking 非阻塞 使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此,一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。

通俗理解:NIO是可以做到用一个线程来处理多个操作的。假设有10000个请求过来,根据实际情况,可以分配50或者100个线程来处理。不像之前的阻塞IO那样,非得分配10000个 2.操作通道和缓冲,数据总是从通道被读取到缓冲中或者从缓冲中写入到通道中。

核心

Channel

1.通道可以同时进行读写,相比Stream流 只可以进行读或者写 2.通道可以实现异步读写 3.通道可以从缓冲读数据,可以向缓冲写数据

Buffer

buffer的容量 Capacity 当前读写的位置 Position 信息末尾的位置 Limit flip():将buffer从写模式切换为读模式,将position的值重置为0,limit的值设置为之前的position的值。 clear() vs compact(): clear 方法清空缓冲区;compact只会清空已读取过的数据,而未读取的数据保存在Buffer中。

Selector

一个组件,可以检测多个NIO channel,看看读或者写事件是否就绪,多个Channel以事件的方式可以注册到同一个Selector,从而达到一线程处理多个请求。

本文由【哎那个新来的】发布于开源中国,原文链接:https://my.oschina.net/u/2870118/blog/3158183

全部评论: 0

    我有话说: