演员模型如何使用?


18

我已经阅读了一些有关actor模型的知识,但是并不太了解如何在现实世界中使用actor –如何为它们建模问题。

有人可以解释一下吗?一个简单的示例或示例的链接将不胜感激。


还是您是指演员模型
back2dos

我怀疑您的意思是特工,不是演员。如果是这样,请查看以下Wi​​kipedia条目:en.wikipedia.org/wiki/Software_agent
DwB 2011年

1
他们出演《绿灯侠》和《猿人星球》,以娱乐/的极客。反过来,极客/。招待我们其他人。
工作

我的意思是演员模型,并且已经更新了我的帖子以进行澄清。
Pnutus 2011年

Answers:


21

从建模动作,消息等方面来讲,参与者是一种建模软件的方式,它提供了几个有用的项目...

  1. Actor可以驻留在单个线程上,从而可以进行非线程安全/非并发操作,而无需一堆锁定魔术。演员将响应其收件箱中的消息。当您希望它处理命令时,您会向它发送一条消息,它将按收到顺序对其进行处理。就像普通的队列一样。线程安全是这里的杀手,,我在许多我从事的开源项目中都使用了它。

  2. 例如,在某些语言中,例如Scala,通过拆分参与者并将他们交流的渠道转变为远程渠道,很容易将基于参与者的代码在单个过程中转变为分布式系统。这在实现方式之间有所不同,但很简单,但这是一个了不起的功能。

  3. 帮助将重点放在基于任务的事件上,而不是CRUD事件上。CRUD很简单,但是就像与文件柜进行交互一样。如果我们可以提供比所生产的软件更多的价值,那么为什么要这样做呢?在基于任务的系统中,将多个操作绑定到单个“更新”命令比仅保存到数据库更有用。这也涉及到CQRS之类的东西。


感谢您提供有用的答案和链接。您会建议开始使用哪种语言,以使演员感觉更好?
Pnutus 2011年

1
我认为这取决于您使用哪种语言。不过,Scala可能具有围绕演员的一些最佳文档,因为它们是一种语言概念。总的来说,Erlang非常适合消息传递,整个语言都基于该概念。
特拉维斯

我将看一下Scala和Erlang。找到了 Erlang入门指南,从这里开始。谢谢!
Pnutus 2011年

+1:非常有趣。您是否知道有没有实现远程参与者的C ++库?我很高兴使用Scala,但是我的项目是C ++。
乔治

1
考虑以下C ++ Actor模型实现:actor-framework.org
Chen OT

4

特拉维斯的答案很可靠。当您开始谈论并发时,您正在尝试解决资源问题。与线程和锁的并发非常容易出错。角色模型有助于迫使您将代码的并发部分编程为自包含的块,这些块可以并行执行而无需依赖于另一段代码。您正在尝试避免种族状况和僵局之类的麻烦。

在这次对话中,演员就像你我一样。您只是无法进入我的大脑并挑选出我正在输入的内容。您给我传递了一条消息,说“我们为什么存在?” 我坐着,打一些电话,然后回信说:“我想,所以我是。” 您无法分辨我在自己的地球上所做的事情,您与我的唯一联系就是通过我们来回传递的信息。

编辑:

您没有说自己喜欢哪种语言,而是查看您的语言是否有参与者实现。也许最简单的是python中的一些actor库。但是可能对学习更好的是Erlang。语言有点粗糙,但是一旦您克服了细微差别,它就是一门好语言。


我不确定的编辑是否针对我,但我选择的武器通常是Haskell。Erlang绝对是一门好语言。传统上,Haskell依靠CSP进行并发,但是那里有一些参与者实现。
M15K 2013年

-2

参与者是用例图的元素,它表示可以在系统上起作用的任何外部实体(用户,外部系统等)。任何基本用例都将包含参与者-仅以Google“用例”为例就可以了。


6
那些不是简笔画吗?
pillmuncher 2011年

1
我不清楚,你误会了。我说的是演员模型。
Pnutus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.