[网络事件处理模型] IO服务模式:BIO模式和Reactor模式

Reactor模式是对IO多路复用的配套,即在多个文件就绪后,进行事件分发和处理的一种模型。

Netty、tomcat、Nginx都使用了Reactor模型。

1. BIO模式(网络编程最简单的模式)

即由一个server线程监听用户请求,接受到请求后,创建一个handler线程,将请求对应的socket线程传给handler,让对方处理通信和数据交互。当完成通信和处理后,线程将被销毁。

换句话说,每个连接对应一个线程,进行同步阻塞IO处理。

优点:

多线程模型,可以充分利用CPU资源。

缺点:

1)会严重依赖线程,并且会出现线程数量膨胀问题。

2)频繁创建/销毁线程会带来巨大的开销。

3)线程数量会受到限制,导致并发请求量过大时服务不可用。

4)线程切换成本很高带来的高负载。

5)若有交互不频繁的长连接,会占用大量资源维护相应线程。

6)系统负载不均衡。

2.Reactor模式

使用IO多路复用策略,将受到的请求派发到相关处理程序(Handler)。

实现Reactor模式需要包括以下这些类:

1)InitiationDispatcher 创建器,管理EventHandler和分发event。也可以处理事件调度,即将请求任务分发给处理器异步处理。

2)EventHandler 事件处理器。根据事件状态创建不同的处理器。

3)Handle,一个事件(Socket、文件描述符或者事务)。

4)Demultiplexer, 阻塞等待一系列Handle事件到来(使用select或者epoll模型),当返回时说明有可处理事件,返回给Dispatcher处理。

 

posted @ 2022-02-23 17:37  Cheung-10  阅读(9)  评论(0)    收藏  举报