二、NIO的理解
与Socket类和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。这两种新增的通道都支持阻塞和非阻塞两种模
式。阻塞模式使用非常简单,但是性能和可靠性都不好,非阻塞模式则正好相反。幵发人员一般可以根据自己的需要来选择合适的模式,一般来说,低负载、低并发的应用程序可
以选择同步阻塞I/O以降低编程父杂度,但是对于高负载、高并发的网络络应用,需要使用NIO的非堵塞模式迸行幵发。
NIO 全称New IO,也叫Non-Block IO 是一种非阻塞同步的通信模式。
NIO流程图

NIO 设计原理
NIO 相对于BIO来说一大进步。客户端和服务器之间通过Channel通信。NIO可以在Channel进行读写操作。这些Channel都会被注册在Selector多路复用器上。Selector通过
一个线程不停的轮询这些Channel。找出已经准备就绪的Channel执行IO操作。NIO 通过一个线程轮询,实现千万个客户端的请求,这就是非阻塞NIO的特点。
NIO几个新概念
1)缓冲区Buffer
它是NIO与BIO的一个重要区别。BIO是将数据直接写入或读取到Stream对象中。而NIO的数据操作都是在缓冲区中进行的。缓冲区实际上是一个数组。Buffer最常见的类型
是ByteBuffer,另外还有CharBuffer,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer,DoubleBuffer。
2)通道Channel
和流不同,通道是双向的。NIO可以通过Channel进行数据的读,写和同时读写操作。通道与流之间不同之处是通道是双向的,流只能一个方向移动(一个流必须是
InputStream或者OutputStream的子类)。 通道分为两大类:一类是网络读写(SelectableChannel),一类是用于文件操作(FileChannel),我们使用的SocketChannel
和ServerSocketChannel都是SelectableChannel的子类。
3)多路复用器Selector
NIO编程的基础。多路复用器提供选择已经就绪的任务的能力。就是Selector会不断地轮询注册在其上的通道(Channel),如果某个通道处于就绪状态,会被Selector轮询出
来,然后通过SelectionKey可以取得就绪的Channel集合,从而进行后续的IO操作。服务器端只要提供一个线程负责Selector的轮询,就可以接入成千上万个客户端,这就是
JDK NIO库的巨大进步。
Java NIO(New Input/Output)提供了SocketChannel和ServerSocketChannel,支持阻塞和非阻塞模式。非阻塞模式适合高并发场景,通过Selector多路复用器,一个线程可以轮询多个Channel,提高效率。NIO的关键概念包括Buffer(数据操作在缓冲区中进行)、Channel(双向通信)和Selector(选择已准备就绪的通道)。NIO使得服务器端可以用较少的线程处理大量客户端请求。
https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.999.0.0

2623

被折叠的 条评论
为什么被折叠?



