[网络事件处理模型] 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处理。