C++ Actor并发模型框架 Actor Framework (CAF)

什么是ACTOR 并发模型

Actor 是一种处理并发计算的基本模型,主要概念是通过OO 面向对象思想,将计算单元独立成一个对象,在模型中成为Actor,各个独立计算单元之间的通信通过mailbox(邮箱),每个Actor维护自己的mailbox,ma
ilbox存储的是需要消费的消息。这里扩散一下知识,在更早期出现的ESB(enterprise service bus)企业服务总线模型是将服务接到消息总线上,服务获取总线上投递给他的消息。
这种方式存在耦合,以及需要一个个服务进行确认,直到消费者进行确认消费,好处是实现简便,接入现在的消息中间件就行。
以下为Actor模型的组件图:
在这里插入图片描述
Actor的思想早在1973年就提出,最早在erlang中实现,应用于电信系统,可以想象下,每个通话内容质量互不影响,每分每秒有多少人在通话。

在Erlang中,每段代码都运行在进程中,进程是Erlang中对Actor的称呼,意味着它的状态不会影响其他进程。系统中会有一个supervisor,实际上它只是另一个进程。被监控的进程挂掉了,supervisor会被通知并对此进行处理,因此也就能创建一个具有自愈功能的系统。如果一个Actor到达异常状态并且崩溃,无论如何,supervisor都可以做出反应并尝试把它变成一致状态,最常见的方式就是根据初始状态重启Actor。

Actor模型不关乎任何语言,只在于思想。
在Java领域的框架有 Scala实现的 Akka、C++ 实现的有:CAF,我自己实现的actor系统是借鉴于skynet.

今天主要介绍CAF

CAF c++版的 Actor 模型开发框架

CAF的源码仓库
https://github.com/actor-framework/actor-framework

c++ actor framework 并没有被boost收入,而是自己独立发展。

先简要介绍我自己的实现版本:

  1. 场景:

    actor数量固定(强场景),比如整个处理系统的计算单元独立分工,类微服务(进程内)

  2. 实现方式:

    a、每个actor自己维护消息队列
    b、actor间通过依赖反转实现消息投递
    c、actor系统(主线程),监听到有需要线程的actor之后,从线程池分配线程给actor进行处理,每个acotr随机处理消息数量,防止消息过多从而线程独占。

CAF中的Actor

class TestActor : public event_based_actor {
   
public:
  TestActor(actor_config& cfg) : event_based_actor(cfg) {
   
    // nop
  }

  behavior make_behavior() override {
   
    return {
   
      [](int x, int y) {
   
        return x + y;
      },
      [](double x, double y) {
   
        return x + y;
      }
    };
  }
};

重写了make_behavior的类就是一个类类型的actor。
可以在make_behavior中实现我们的计算逻辑。

actor间通信

caf框架出了进程内actor通信外,还支持进程间通信,这就比我只需在进程内通信的需求大得多了, 先讲进程内通信方式

进程内


behavior adder() {
   
	return {
   
  	[](int x, int y) {
   
    	return x + y;
  	},
  	[](double x, double y) {
   
    	return x 
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值