Actor模型的本质已经被强调了无数遍:万物皆Actor。Actor之间只有发送消息这一种通信方式,例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消息的方式来传递信息。这么做看似不如直接方法调用来的直接,但是由于大量的消息可以同时执行。同样,消息让Actor之间解耦,消息发出之后执行成功还是失败,需要耗费多少时间,只要没有消息传递回来,这一切都和发送方无关。Actor模型的消息传递形式简化了并行程序的开发,使开发人员无需在共享内存(确切地说,其实是共享“写”)环境中与“锁”、“互斥体”等常用基础元素打交道。不过,使用Actor模型编写应用程序,需要开发人员使用一种与以往不同的设计思路,这样的思路说难倒不难,说简单也不简单。等我们有了成熟、稳固的Actor模型之后(例如高效的调度,合适的容错机制,老赵正在为此努力),再回头来探究这种特殊的架构方式。

由于Actor执行的唯一“事件”便是接受到了一个消息,而一个Actor很可能会做多件事情,因此我们一定需要一种机制,可以把消息“分派”到不同的“逻辑段”中去,并为不同的逻辑指定各自所需要的参数。例如,Person是一个Actor类型,它有三种任务,不同的任务会带有不同参数:
◆聊天(Chat):指定另一个Person对象(聊天的另一方),以及一个Topic对象(聊天的话题)。 
◆吃饭(Eat):指定一个Restaurant对象(餐馆)。 
◆干活(Work):指定一个Person对象(工作完成后的汇报人),以及一个Job对象(任务)。

当Person对象获得一条消息时,它需要将其识别为聊天、吃饭或干活中的一种,再从中获取到这个行动所需要的数据。如果用一幅示意图来表示,它可能是这样的:

如何在C#中把一条消息转化为一段逻辑的执行,并且尽可能确保一些优势(如易于编写,静态检查,代码提示,重构,单元测试……),这便是这系列文章唯一的目的。正如文章的标题,我们关注的是“消息执行方式”,而不是:
◆“消息传递”与“共享内存”两种并行方式的比较 
◆讲述Actor模型的应用程序设计方式。 
◆提出消息传递时的解耦方式。 
……

文章使用Actor模型作为示例,是因为我编写的ActorLite组件易于说明问题,并且是典型的“消息传递”场景。事实上,文章所表达的内容,适合任何基于消息传递的C#场景,例如内存中的消息队列、生产者/消费者模式、消息总线……它并没有限制Actor模型这一种架构方式。

Actor模型的本质:究竟是要解决什么问题相关推荐

  1. Actor模型的本质

    Actor模型的本质已经被强调了无数遍:万物皆Actor.Actor之间只有发送消息这一种通信方式,例如,无论是管理员让工作者干活,还是工作者把成果交还给管理员,它们之间也要通过发送消息的方式来传递信 ...

  2. Java并发编程实战~Actor 模型

    Hello Actor 模型 Actor 模型本质上是一种计算模型,基本的计算单元称为 Actor,换言之,在 Actor 模型中,所有的计算都是在 Actor 中执行的.在面向对象编程里面,一切都是 ...

  3. 95-848-020-源码-AKKA-Akka与Actor 模型

    1.概述 Akka是一个用来开发支持并发.容错.扩展性的应用程序框架.它是actor model的实现,因此跟Erlang的并发模型很像.在actor模型的上下文中,所有的活动实体都被认为是互不依赖的 ...

  4. java actor模型实例,详解Theron通过Actor模型解决C++并发编程的一种思维

    现今,单台机器拥有多个独立的计算单元已经太常见了,这点在服务器的处理器上表现尤为明显,据AMD的一张2012-2013服务器路线图显示,服务器处理器的核心数将在2013年达到20颗之多,合理的利用CP ...

  5. Actor模型是解决高并发的终极解决方案

    写在开始 一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递.使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争.处理各种锁的问题是让人十分头痛的一件事. 传统多数流行的语言并 ...

  6. 【Akka】Actor模型探索

    Akka是什么 Akka就是为了改变编写高容错性和强可扩展性的并发程序而生的.通过使用Actor模型我们提升了抽象级别,为构建正确的可扩展并发应用提供了一个更好的平台.在容错性方面我们采取了" ...

  7. skynet源码分析:服务,Actor模型,lua接口编程,demo演示Actor编程思维

    skynet刚开始是单进程多线程的,它是由一个一个的服务组成的.在skynet上做开发,实际上就是在写服务.服务与服务之间通过消息队列进行通信. 做为核心功能,Skynet 仅解决一个问题: 把一个符 ...

  8. 深入解析actor 模型(一): actor 介绍及在游戏行业应用

    1 介绍 1.1 什么是actor 对于刚接触actor的我,第一感觉就像redis一样,每个actor就是一个redis 实例,都有自己消息队列,actor相互通信通过将消息发给对方,消息发送进对方 ...

  9. 在.NET中实现Actor模型的不同方式

    上周,<实现领域驱动设计>(Implementing Domain-Driven Design)一书的作者Vaughn Vernon,发布了Dotsero,这是一个使用C#编写的.基于.N ...

最新文章

  1. 大数据技术下面向企业需求的高校应用型人才培养课程体系设计
  2. Using PyQt first procedure-bupt IPTV client
  3. 怎么批量抠复杂的图_怎么用手机修图,抠图、拼图,证件照制作?
  4. php静态方法场景,深入介绍PHP中的static的修饰方法和yield的使用场景
  5. 佳士得于5月19日至27日以NFT形式拍卖安迪·沃霍尔作品
  6. python遍历数据
  7. java项目连接Oracle配置文件
  8. spring - ioc和aop
  9. 鼠标放在一个连接上,会显示图片(类似tooltip)
  10. RHEL 6.3 KVM 虚拟机安装配置管理
  11. python app自动签到器_Python实现自动签到脚本功能
  12. [渝粤教育] 九江学院 计量经济学 参考 资料
  13. 第四章 SQL命令 ALTER VIEW
  14. 2022年面试,整理全网初、中、高级常见 Java 面试题
  15. 大疆御2电池数据查看教程
  16. 苹果官方付费升级内存_vivo推出内存扩容服务:良心还是坑钱?
  17. 常用电平转换电路的方法
  18. AARRR模型:用户激活指标+方法,很实用!
  19. 客户旅行地图教程 - 带15个示例
  20. 2022年度总结与2023未来规划

热门文章

  1. 如何查询电脑系统和服务器地址,如何查询电脑系统和服务器地址
  2. 前端文件下载兼容方案(兼容主流浏览器,包括IE与Safari)
  3. arm汇编中DCB、DCW、DCD、DCQ指令
  4. java读取excel表格数据
  5. 符号配对(C语言利用栈堆)
  6. sFlow-rt 3.0流量监控工具安装部署及简单实验
  7. 去你的35岁危机|ONES 人物
  8. 计算机函数if80到90分怎么弄,用EXCEL工作表怎样利用IF函数计算分数等级
  9. OpenCV | 直线拟合fitline函数
  10. 色彩表示与编码之JPEG压缩编码