Java的NIO

image-20240320151336501

它的大致模型如上图所示,采用了I/O多路复用的Reactor模型。

单线程模型

上图展示的是单线程模型,也就是说Reactor这里是单线程的,每当有一个事件过来,只有一个线程可以处理该事件,当有下一个事件需要处理时,必须等待上一个事件结束后,才能够被处理。这里与Redis 的模型一致。Redis是采用了一个队列,存储所有的待处理命令,然后有一个线程依次从队列中取出执行。

多线程模型

为了提高处理效率,也有Reactor多线程模型,即Reactor这里变为多线程。

image-20240320152214537

由上图可以看到,当有一个事件变的待处理时,不再是原来的一个线程,而是从线程池中选择一个线程去处理对应的事件,提高了处理效率。