高性能IO并发模型(Reactor/Proactor)

对于网络IO的模型中的IO多路复用编程一般用于编写demo调试程序,再工业级生产产品中针对多路复select,poll,select的基础上做一层封装,在学术上有专业的名字Reactor和Proactor,Reactor应用于Linux服务器下的同步IO,Proactor应用于windows服务器的异步IO

1 Reactor模型

普通函数调用流程如下:
程序调用函数---->函数执行----》程序等待—》结果和控制权返回----》程序继续

1.1 定义

reactor模型是一种事件驱动机制:
程序不主动调用某个api处理,而是相应的事件发生,reactor主动调用应用程序注册的接口进行处理。

1.2 思想

将所有要处理的IO事件注册到一个IO多路复用器上,同时主线程/进程在多路复用器上。一但有IO事件到来或者准备就绪,多路复用器返回并调用相应的事件处理函数。
高性能IO并发模型(Reactor/Proactor)_第1张图片

1.3 三种reactor模型

a)单Reactor单线程模型
高性能IO并发模型(Reactor/Proactor)_第2张图片
三个重要组件:
多路复用器(Reactor):负责监听注册进来的IO事件
事件分离器:将多路复用器中返回的就绪事件分到对应的处理函数中(dispatch)
事件处理器:负责处理特定事件的处理函数(对应图中read,decode,compute,encode,send等)

该模型中,reactor线程既要负责监听新连接的到来,又要dispatch请求到handler中。

消息处理流程如下:
1 reactor通过epoll监听连接事件,收到事件后通过dispatch转发
2 如果是连接建立事件,则有acceptor接收连接,并创建handler处理后续事件
3 如果不是建立连接事件,reactor会分发调用handler来响应
4 handler完成read—》业务处理—》send的完整业务流程。

简化版本的代码:

// reactor初始化 创建多路复用器
int reactor_init(struct reactor *r) {
   

你可能感兴趣的:(网络编程,reactor,epoll,网络,socket)