基于事件驱动的编程模型(C++asio网络库相关)

基于事件驱动的编程模型

1、reactor模式:lighttpd,libevent,libev,poco
2、Proactor模式:Asio,locp
rector模式简单一点

reactor模式:

有一个中心部分处理事件告诉回调通知
initiation dispatcher:中心模块,handle_events()调用synchronous event根据返回值知道handle哪些事件已经完成,然后再调用event handler
synchronous event demultiplexer:处理io的事件分离器,如外部有玩家进来或触发IO事件
handle:一般网络连接socket(最终要处理的)
大部分单线程服务器都用这个模式
如handle被通知可以发送一份数据,最终发送通过event_handler完成
缺点:
所有逻辑跑一起,event handler容易阻塞,如新用户登录要拉数据
在这里插入图片描述

proactor模式:

很多proactor本身可以由reactor模拟实现
initor:发起者(socket)绑定最终回调
aop:自身当成一个事件放入队列
proactor:事件分发查看哪些事件已经完成,调用最终回调
调用最终回调时一定是某事件已经完成
reactor调用最终回调时是将要做某件事情,proactor是先做事情做完调最终回调
单线程用此模型比较废,IOCP就是此模型所以效率高
linux是对ractor模式模拟proactor
缺点:
如读一兆字节要准备足够空间才能调用最终回调,所以内存使用率比较高
编程复杂度也比较高

异步操作在左下图左边,真正事件派发在下图右边
在这里插入图片描述

发布了137 篇原创文章 · 获赞 33 · 访问量 1581

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104048408