基于事件调度的Actor模型

本文详细介绍了基于事件调度的Actor模型,阐述了其核心概念、组件、调度过程及优化细节。强调了在多核环境下如何利用少量线程处理大量并发任务,以及在实时性要求高的场景下可能存在的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

事件在这里可以理解为消息到达事件,事件到来时才为Actor分配线程并执行消息的处理。这样便可以使用少量的线程来执行大量Actor产生的任务,Actor有消息要处理的时候才占用CPU,没有的时候就挂起,保证了每个线程都在高效执行任务。


Actor模型组成

  • cpu
    用于执行线程,目前单机上为多核。
  • workthread
    工作线程,保证线程数目<=cpu核数,否则只会把cpu时间浪费在线程切换上。
    工作线程跑的调度函数大致是这样的
queue<ActorStruct*> gmq;   //全局变量,存储需要进行调度的Actor的队列。

void scheduler() {
        while(true) {
                ActorStruct* actor = gmq_pop();    //尝试从gmq中获取一个需要调度的Actor
                void* msg = actor->mq.pop();       //从actor的mq中获取一条消息
                actor->dispatch(msg);              //执行回调函数,处理消息
        }
}
  • ActorStruct
    每个Actor的数据结构是这样的
 struct ActorStruct {
        queue<msg> mq;   //消息队列
        void dispatch(void* msg);   //
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值