首页>>技术分享>>html相关>了解Reactor模型

了解Reactor模型

大路 html相关 2023-10-12 155

本文将介绍进程/线程模型,服务器如何处理请求,I/O阻塞和I/O非阻塞式模型对比。



不同服务应用其实内涵模型几乎一致,或者说优秀的编程思想几乎都是一样的,所以无论是java的Netty还是Nginx,内含的编程思想都是一样的。



I/O阻塞模型



正常情况下,或者说我们普通人的想法,多半是这样的,一个请求过来了,那么先把请求处理了。



这样会有一个问题,就是会造成阻塞,比方说,业务处理的时间长达一个小时,难道后面就没有其他的请求了吗,一个cpu有八个核心,难道只用其中一个,这肯定不合理。



有人说,我们起多个进程处理不就完了吗,那确实可以,但是进程的粒度要比线程大得多,一个进程其实分为很多个线程的,如果每次都有一个请求,那么这台服务器,没多久资源就会耗尽了。



所以我们改进改进



Reactor模型



既然如此,那就改进,把业务处理改成线程级别,这样不就充分利用cpu了?



Reactor 模式,是指通过一个或多个输入同时传递给服务处理器的服务请求的事件驱动处理模式。



服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor 模式也叫 Dispatcher 模式。



即 I/O 多了复用统一监听事件,收到事件后分发(Dispatch 给某进程),是编写高性能网络服务器的必备技术之一。



·比起阻塞模式,它无非是多了一个分发器,这玩意其实就是我们常用nginx,而后端处理业务用的服务,一般都是非阻塞式的,甚至可以使常驻的线程池,由分发器分发给线程池后,线程池根据设定,可能是阻塞,也可能是非阻塞式解决业务功能。



Reactor模型,又可以分为



  • 1)单 Reactor 单线程;

  • 2)单 Reactor 多线程;

  • 3)主从 Reactor 多线程。



其区分的根本是,Reactor是是否是单线程,是否是注册机制多线程,甚至分发器本身还可以拆分为多线程,性能和代码编写难度正比增加


标签: