问题标签 [actor-model]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
programming-languages - 什么是编程语言上下文中的演员模型?
我已经在 Erlang 演员模型、Groovy 演员、Scala 演员模型等上下文中的多个地方看到过它。这是指什么?
theory - Actor 模型对共享状态的优势
我正在阅读有关 Actor 模型的演示文稿,每个人都声称它优于共享状态并行编程,因为它避免了许多陷阱,如死锁和竞争条件。我在问自己这种说法的具体内容是什么。如果它避免了这些问题,它是如何做到的?
multithreading - 什么时候应该使用 Actor 模型?
什么时候应该使用Actor 模型?
它当然不能保证无死锁的环境。
演员 A 可以等待 B 的消息,而 B 等待 A。
此外,如果参与者必须确保其消息在继续执行下一个任务之前已得到处理,则它必须发送消息并等待“您的消息已处理”消息,而不是直接阻塞。
模型的力量是什么?
java - JVM 上的零拷贝消息传递
Actor 消息传递语义的忠实实现意味着消息内容是从逻辑角度深度复制的,即使对于不可变类型也是如此。消息内容的深度复制仍然是 Actor 模型幼稚实现的最大瓶颈之一,因此一些实现(即 Kilim)支持零复制消息传递。
我的问题是,如何在 JVM 等共享内存平台中实现零拷贝消息传递(作为Actor 库/框架的一部分)?我认为它只能用于具有不可变内容的消息,并且必须以某种方式限制消息引用的可见性。但是,我很难找到 Actor 模型实现背后的“理论”。
performance - Actor 模型中消息传递的性能
我已经看到根据他们的演员完成的演员模型实现的基准。例如,Akka Actor 非常轻量级(每个 Actor 600 字节),可以创建数百万个。但是,我从未见过关于消息传递吞吐量的基准测试。
例如,给定一些参与者,每秒可以在他们之间传递多少条消息?
有没有人可以链接到这样的性能基准(就消息传递吞吐量而言)?
scala - Scala actor:调度多线程应用程序的两种不同方法
我是 Scala Actors 的新手。我计划构建的是一个应用程序,它有几个墨盒,每个墨盒都执行特定的 http 调用并定期检索+保留一些信息。稳健性是最重要的。到目前为止,这些是我想到的方法:
- 围绕 TimerTask 构建应用程序,从 Actor 扩展墨盒并
.act
定期调用它们的 s (或者我应该向它们发送消息吗?有什么区别?) - 从 Actor 扩展并使用 Timeouts 定期运行它们。
有人可以阐明这些差异吗?
erlang - 演员模型和碰撞检测
我只是在考虑将Erlang用于游戏服务器的可能性。(哦,我不是 Erlang 专家,只是考虑舞台)这意味着使用Actor Model进行游戏模拟。当然,最大的吸引力在于它的并发分布在多个节点上。
我目前的大问题是我应该如何执行多角色交互,如碰撞检测。(这只是一个例子)
尽管任何游戏都需要碰撞检测,但从 Actor 模型的本质来看,它看起来效率不高,甚至没有意义,因为它需要全局同步的状态查询和所有目标 Actor 的更新。如果我使用任何同步,它会覆盖 Erlang 演员模型的所有好处。
当然,如果我正确使用空间分区,一次定位演员可能会更小,但这只是一种优化,而不是主要答案。或者这是这个问题的正确答案?通过减少交互参与者的数量来减少同步范围?
scala - Scala 演员不一致地自杀
我是 scala 的新手,我正在编写 scala 代码来实现糕点协议。协议本身并不重要。有节点,每个节点都有一个我要填充的路由表。这是代码的一部分:
问题是当对 getMatchingNode 的函数调用发生时,演员自己突然死亡。'list' 是所有节点的列表。(节点对象列表)此外,这种行为并不一致。每个参与者(对于 10 个节点)应该调用 getMatchingNode 15 次。但是在调试时,演员在一次调用后或有时在 3-4 次调用后会在 getMatchingNode 函数调用中杀死自己。被执行的 scala 库代码是这样的:
Eclipse 显示此代码已从 getMatchingNode 函数中的 for 循环调用
奇怪的是,有时循环表现正常,有时它会进入杀死演员的scala代码。
任何输入代码有什么问题?
任何帮助,将不胜感激。
scala - 意外更改 Scala Actor 的局部变量
我目前正在研究一种与 Scala 一起使用的日志记录机制,但我遇到了一个意外问题,阻止了我实际研究它。为了测试功能,我希望设置一个简单的消息传递环。在环内,每个节点都是 Scala Actor 的扩展,并且知道它的直接邻居(上一个/下一个)。
环构造如下完成,参数“nodes”从控制器参与者传递:
这似乎可以按我的意愿运行,每个节点都接收到正确的邻居对。在节点类中有一个大小为 2 的数组,设置如下:
一切都很好,但是,当我引入要在环周围传递的消息时(从节点 0 开始),我发现每个节点现在在它的 ringNeighbors 数组中都有相同的值。这些值与 ringBuilder(即节点 8 的邻居)函数中循环的最终迭代一致。没有发生额外的消息传递,所以我不明白这些值是如何为节点数组中的每个实例修改的,因此是环。
我仍在学习 Scala 的基本知识,希望我没有错误地忽略一些简单的事情。