brpc源码解析(八)—— 基础类EventDispatcher详解

前阵子比较忙,好久没有更新了,后续争取恢复更新频率,这次先更一篇相对简单的,介绍下EventDispatcher类,前面的文章涉及过这个概念, EventDispatcher,顾名思义,就是用来分发事件的,在brpc里面,因为是不区分io线程和用户线程的,这个EventDispatcher,也仅仅是用来做事件分发,不负责具体的数据读取写入,所以本身的吞吐量可以很大。这个类很重要,但是本身比较简单,下面介绍下核心函数和类变量。

1.启动相关函数

(1)void Run()
核心功能函数,调用epoll_wait等待事件并分别调用函数处理,epoll_in事件来后调用Socket:: StartInputEvent,epoll_out事件来后调用Socket::HandleEpollOut,Socket:: StartInputEvent和Socket::HandleEpollOut则是分别去执行对应socket里相应的用户处理函数。核心代码如下:
在这里插入图片描述
(2)static void* RunThis(void* arg);
封装了Run,用于在bthread里启动调用Run。
在这里插入图片描述
(3)virtual int Start(const bthread_attr_t* consumer_thread_attr);
新建bthread以RunThis为入口启动当前EventDispatcher,开始监听epoll事件并分发。
在这里插入图片描述

2.添加epoll_in事件函数

int AddConsumer(SocketId socket_id, int fd)
在fd上添加epoll_in事件(可读事件)进行监听,参数socket_id会保存到添加的事件里,后面事件发生了需要根据这个socket_id address实际的socket,拿到里面的_on_edge_triggered_events等进行实际的处理,总结来说就是调用这个函数来添加需要用socket_id对应的socket来处理的发生在fd上的边缘触发epoll_in事件。事件来后直接调用的是Socket:: StartInputEvent。
在这里插入图片描述

3.添加epoll_out事件函数

AddEpollOut(SocketId socket_id, int fd, bool pollin)
添加监听epoll_out事件(可写事件),和添加epollin的方式类似,epoll_out事件,多了一个pollin参数,如果为true会同时监听epoll_in,事件来后直接调用的是Socket::HandleEpollOut,比如以前的文章提到过,brpc里在往某个socket里写数据的情况下,如果还没连接则发起连接并用“继续写入的函数”作为回调注册epollout后直接返回,让回调完成后续的写操作。
在这里插入图片描述

4.获取EventDispatcher函数

Brpc支持多个EventDispatcher,具体EventDispatcher数量由参数决定,默认数量是1,每个EventDispatcher负责一部分fd的监听处理。
在这里插入图片描述各个fd都是调用GetGlobalEventDispatcher来获得对应的EventDispatcher,这个函数就在event_dispatcher.cpp里,EventDispatcher类外brpc namespace下的一个函数,如下:
在这里插入图片描述
如果没初始化会先初始化并运行,InitializeGlobalDispatchers是具体的初始化函数,由pthread_once保证只执行一次。这里是基于MurmurHash3将fd均匀分配到各EventDispatcher。InitializeGlobalDispatchers函数如下:
在这里插入图片描述

5.核心类变量

(1)int _epfd:监听事件的epfd
(2)bthread_t _tid:EventDispatcher当前所在的bthread的id
(3)bthread_attr_t _consumer_thread_attr:epoll_in或者epoll_out事件到来后新建bthread执行用户回调函数所要用到的线程属性

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
《计算机图形学——几何工具算法详解》PDF是一本关于计算机图形学的书籍,主要介绍了图形学中的几何工具算法。 该书详细解析了计算机图形学中的几何工具算法,涵盖了从基础知识到高级算法的内容。首先,书中介绍了计算机图形学的基本概念和原理,包括图形学的历史背景、矢量、二维坐标系和三维坐标系等基础知识。然后,书中详细介绍了几何变换算法,包括平移、旋转、缩放等操作对图形的影响及其在计算机图形学中的应用。此外,还介绍了曲线和曲面的绘制算法,如贝塞尔曲线、B样条曲线和NURBS曲面等,以及相关算法的实现方法。另外,书中还详细阐述了光照和着色算法,包括光照模型、阴影生成和着色技术等。 《计算机图形学——几何工具算法详解》PDF书籍内容丰富、详细,适合计算机图形学领域的学习者和研究者阅读。通过学习该书,读者可以系统地了解计算机图形学的几何工具算法,掌握图形学中的基本概念和实际应用技术。此外,书中还提供了大量的实例和案例,有助于读者将理论知识应用到实际问题解决中。 总之,通过阅读《计算机图形学——几何工具算法详解》PDF,读者可以深入了解计算机图形学的几何工具算法,掌握相关的基本概念和实际应用技术,对计算机图形学领域有更深入的认识和理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值