NIO三大核心之选择器(Selector)

选择器(Selector)

基本介绍

用一个线程,处理多个客户端连接,就会用到NIO的Selector(选择器)。

Selector能够检测多个注册的服务端通道上是否有事件发生。如果有事件发生,便获取事件,然后针对每个事件进行响应的处理。

这样可以用单线程去管理多个通道,也就是管理多个连接和请求。

image-20220418223905944
image-20220418223905944

Terwer...大约 4 分钟后端开发分布式nioselector
NIO三大核心之通道(Channel)

通道(Channel)

基本介绍

NIO中所有的IO都是从通道(Channel)开始的。NIO的通道类似于流,但是有区别:

  1. 通道可读可写,流一般是单向的(只能读或者写,所以之前socket的demo里面分别创建一个输入流和输出流)。

  2. 通道可以异步读写。

  3. 通道总是基于缓冲区Buffer来读写

    image-20220418214447367
    image-20220418214447367

Terwer...大约 3 分钟后端开发分布式niochannel
NIO三大核心之缓冲区(Buffer)

缓冲区(Buffer)

基本介绍

缓冲区(Buffer):缓冲区本质上是一个可读可写的内存块。

可以理解成一个数组,该对象提供了一组方法,可以轻松的操作内存块。

缓冲区内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。

Channel提供从网络读取数据的通道,但是读取或者写入数据都必须经过Buffer。

image-20220418165707232
image-20220418165707232

Terwer...大约 5 分钟后端开发分布式niobuffer
NIO编程及其三大核心原理

nio编程

NIO介绍

Java NIO,全称为 java non-blocking IO ,是指JDK提供得到新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为NIO(New IO),是同步非阻塞的。

  1. NIO有三大核心部分,Channel(通道),Buffer(缓冲区),Selector(选择器)。

  2. NIO是面向缓冲区编程。

    数据读取到一个缓冲区中,需要时可以再缓冲区前后移动,增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩网络。

  3. Java NIO的非阻塞模式,使一个线程从通道发送或者读取数据,但是它仅能得到目前可用的数据。如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞。所以只至数据变的可用之前,该线程可以继续做其他事情。

    非阻塞写也是这样,一个线程请求写入一些数据到某个通道,但是不需要等待它完全写入,这个线程可以去做别的事情。

    通俗理解:NIO可以做到用一个线程来处理多个操作。

    假设有10000个请求过来,根据实际情况,可以分配50或者100个线程来处理。而不是像之前阻塞IO那样,必须分配10000个线程。


Terwer...大约 3 分钟后端开发分布式nio
Netty核心原理

Netty提供异步的、基于事件驱动的网络应用程序框架,用于快速开发高性能、高可靠性的网络IO程序。


Terwer...大约 3 分钟后端开发分布式nettyniosocket