Netty权威指南笔记

Java IO

2017-06-28  本文已影响0人  coderlan

BIO

基于阻塞IO模型,通常使用一个单独的线程接受客户端的连接,连接建立之后,每个客户端的请求都会有一个线程去处理,因此整个线程数与并发请求数是1:1的关系。

整个模型相对简单;但是缺点也很明显,线程是很宝贵的资源,在并发请求数上去之后,线程数膨胀导致系统性能急剧下降。

可以通过设置线程池大小来避免线程数的无限膨胀。但无法提高并发能力和解决前面请求阻塞会影响后面请求处理的问题。

NIO

Channel

在NIO中表示通道,提供读写的抽象,类似流,但是Channel是双通道的,可读可写。
根据不同的数据传输场景,Channel有很多种实现。

Buffer

缓冲区的抽象,NIO库中,所有的数据都是用缓冲区处理的(读/写)。
根据操作类型的不同,Buffer有几种类型:ByteBuffer(常用)、CharBuffer、ShortBuffer等等。
使用Buffer读写数据一般遵循以下四个步骤:

Buffer有三个属性:

Buffer常用方法

Selector

多路复用器。Selector不断轮询注册在其上的Channel,如果某个Channel上面发生读/写事件,则会被该Selector轮询出来,然后通过SelectionKey获取就绪Channel的集合,进行对应的IO操作。

JDK采用epoll实现Selector。

AIO

NIO 2.0提供了异步通道的概念,异步通道的IO操作都需要提供一个CompletionHandler来进行IO操作成功/失败的回调处理。对应了事件驱动IO,真正实现了异步非阻塞IO.

上一篇 下一篇

猜你喜欢

热点阅读