问题标签 [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.
c# - Actor 模型相对于基于任务的异步模式的优势
Actor 模型被认为是一种更好地利用 CPU 资源的方法。同样,使用 C# 的 async / await 进行编程也有助于程序员正确使用线程,因为线程在进行一些 IO 调用时不会被阻塞,然后可以用于处理另一个请求。
尽管具有位置透明性和容错性等功能,但使用 Akka.NET 实现的 Actor 模型相对于在 .NET 环境中实现的基于任务的异步模式有哪些优势?
design-patterns - 并发计算模型和并发模式有什么区别?
并发计算模型包括actor模型、CSP、Petri网等。
并发模式包括活动对象、屏障、反应器、监视器、调度器等
并发计算模型和并发模式之间有什么区别(也可能是关系)?有趣的是,维基百科的设计模式模式模板在并发模式下列出了“Actor 模型”。这让我更加不确定我上面提出的问题。
我对它们没有太多了解,但是并发模型似乎比并发模式更经常被提及。并发模式会失宠吗?
可以混合使用不同的并发模式和不同的并发模型,还是某些并发模式只与某些并发模型一起使用?
如果可能,您能否提供一些参考资料来支持您的回复或评论?
azure - 由于可能的阻塞,Service Fabric Actor 通知在首次调用后无法触发事件处理程序
我有 2 个可靠的演员叫GameActor
和PlayerActor
。当玩家移动时向玩家ClientApp
发送消息PlayerActor
。然后向PlayerActor
发送消息以GameActor
指示进行了移动。调用后,方法中的方法会GameActor
触发通知。此通知由ClientApp GameEventsHandler
. 然后ClientApp
调用 上的方法GameActor
来检索最新的玩家位置。
ClientApp -> PlayerActor.MoveTo() -> GameActor.NotifyPlayerMoved() -> 触发 ScoreBoardUpdated 事件
由该事件触发的 GameEventsHandler -> GameActor.GetLatestPlayerInfo()
我遇到的问题是这个。我第一次运行它时,它GameEventsHandler
被触发并尝试GameActor
按预期调用。GameActor
接收消息并返回预期的响应。但是客户端似乎没有收到消息。看起来它被阻塞了,因为它没有抛出错误或任何输出。事件处理程序根本不会处理任何后续通知。
游戏演员
PlayerActor
客户
游戏事件处理程序
但是,如果我将事件处理程序逻辑包装在 aTask.Run()
中,它似乎可以工作。
此处演示的完整源代码https://github.com/dasiths/Service-Fabric-Reliable-Actors-Demo
AFAIK 通知不会阻塞且不可靠。所以我不明白为什么我的初始实现不起作用。根据我的理解,可重入模式也不适用于此处。有人可以向我解释这里发生了什么吗?这是预期的行为还是错误?
akka - Akka actor 文档中的“现代计算机体系结构上共享内存的错觉”是什么意思?
我从演员模型开始,在理解背后的概念方面遇到了一些问题,请你用简单的例子来解释一下。
c# - 奥尔良。阿卡网。理解演员模型的问题
如果您不了解 C# 但您熟悉演员模型,请阅读下面的问题,因为它更多地是关于架构和数据管理。
我是一名非常初级的 C# 开发人员,并试图了解演员模型是什么。我已经完成了它,但它留下了我无法得到的一点。
在我告诉你一个问题之前,让我描述一下上下文,以便为你提供更好的理解。
作为一个测试示例,我想为一家假想的银行构建一个应用程序。我将通过使用 akka.net 和 Orleans 来实现这个应用程序,用于学习目的并能够比较它们。
用例:
- 作为用户,我希望能够创建一个新帐户;
- 作为用户,我希望能够使用我的帐户唯一号码登录应用程序;
- 作为用户,我希望能够将钱存入我的帐户;
- 作为用户,我希望能够选择另一个用户并将指定金额转入他们的帐户;
- 作为用户,我希望能够从我的帐户中提取一笔钱。
因此,有以下实体:
- 用户;
- 帐户。
识别用户与其帐户之间的一对一关系。我将使用 ORM 将这些数据存储在我的数据库中。显然,模型看起来像这样:
而且我还想要两个演员/谷物:
- 会计演员;
- 交易服务;
他们的接口:
我不明白的是如何处理关系数据库中的数据。让我们想象以下场景:
50 位用户在线,通过客户端应用程序向应用程序的 REST API 发起请求。他们几乎没有任何停顿地取款、存款和转账。
问题是:
- 我应该为每个用户帐户创建一个演员吗?我很确定我需要,因为这样我才能在不同账户之间实现数千笔交易。
- 如何将用户帐户与 AccountActor 关联?如果我在演员激活/启动之前使用存储库从数据库加载数据并设置状态,是否正确?
主要问题: 如何将状态保存回数据库?
让我们想象一个有 1000 美元的账户 A。并且它发生了大约 100 次由涉及该帐户的用户发起的交易。帐户 A 将其状态从消息更改为消息。
将这些更改保存到数据库的最佳方法是什么?我读到如果我直接从参与者调用数据库,我将因为阻塞操作而失去所有好处。
我是否应该再创建一个参与者来处理来自其他参与者的消息并使用存储库将更改写入数据库?
我的意思是我可以从 AccountActor 发送有关帐户更改的消息到我将调用适当存储库的新演员。但是,这不是瓶颈吗?让我们想象一下有 1000 个在线用户和大约 100 000 个帐户之间的交易。然后负责将帐户更改保存到数据库的参与者可能有太多消息需要处理。
对不起,很长的文字。我试图找到使用 Orleans 或 Akka.net 的应用程序示例,但我没有找到任何使用数据库的东西。
谢谢你的关注。
vert.x - 如何生成完成工作后将取消部署的 Verticle
我目前正在开发我的第一个 vert.x 服务,但我对部署的实现方式并不十分自信。
我有几个 Verticle 来接受来自其他服务的请求并将一堆工作委托给其他 Verticle。如何在工作完成后启动每个任务的 Verticle 并杀死它,或者以编程方式将 Verticle 扩展为任务数量。
我目前在启动时生成了十个 Verticle,并使用事件总线将这些任务分布在 Verticle 上。
主垂直
管理垂直 - HTTP 处理程序
更新垂直
akka - 我们可以在基于参与者的系统中拥有全局状态吗?
Actor 模型的最大优势之一是消除了锁定(Actor 独立且连续地操作)。这是否意味着我们在参与者系统中根本不能拥有任何共享/全局状态(因为访问/更新会带来锁)?
在更实际的情况下,在这样的系统中,来自多个参与者的实体(例如 DB)的更新会发生什么?
function - 基于 Actor 的模型相关的多个问题
我被告知要写一篇论文,作为对 Hewitt Actor-based 模型的评论,其中我必须包括:
a) Hewwit 演员模型定义(完成,解释“演员”如何工作;不允许共享内存等)。
b) 微积分示例 => 如果我应该研究 Gul Agha 在 2004 年定义的 lambda 微积分、pi 微积分甚至 A-pi 微积分,我没有任何线索。
c) 可计算函数的定义 => 没有线索。据我所知,可计算函数被定义为图灵可计算的函数;但同时我读到 Actor-model 是图灵模型的改进;从某种意义上说,图灵机无法计算参与者的相关函数,因为它们没有界限。
d) 描述与其他计算模型的关系(简单,Actor 模型与图灵模型,我有)。
一些与 b) 和 c) 相关的说明,我可以扩展这些部分。一些网站、论文或解释将不胜感激。
actor - 为什么 Actor Model 中的 Actor 可以有多个地址
你好,这是一个非常简单的问题,我已经看到并阅读了人们写的地址可以指向多个演员。我想知道为什么?这样的用例是什么。
假设路由器参与者可以有一个地址,但是在消息上它可以将消息发送给多个参与者,但它的每个子节点仍然可能只有一个地址。
谢谢
scala - scala中的演员参考
/user/master/"+startID
和 和有什么不一样 /user/master/*
?我假设 * 意味着StartRouteProcess
消息将发送给所有参与者。这个对吗?然而, /user/master/"+startID
将Task
消息发送给给定的actorstartID