[何时应该使用Actor模型?

问题描述 投票:41回答:3

何时应使用Actor Model

它当然不能保证无死锁的环境。

演员A可以等待B的消息,而B等待A。

此外,如果演员必须确保已处理其消息,然后再继续执行下一个任务,则它必须发送消息并等待“您的消息已处理”消息,而不是直接阻止。

模型的力量是什么?] >>

何时应使用Actor模型?它当然不能保证无死锁的环境。演员A可以等待B发出的消息,而演员B必须等待其......>

multithreading concurrency functional-programming actor actor-model
3个回答
24
投票

考虑到一些并发问题,您将寻找什么决定是否使用参与者?

首先,我要定义问题...的主要动机是嵌套for循环或递归的加速吗?如果是这样,那么简单的基于任务的方法或并行循环方法将可能对您(而不是参与者)有效。

但是,如果您有一个涉及依赖项和协调共享状态的更复杂的系统,那么参与者方法可以提供帮助。特别是通过使用actor和消息传递语义,您通常可以通过实际复制状态(消息)并对它们做出反应来避免使用显式锁来保护共享状态。


19
投票

至少在两种情况下,Actor的使用是“自然的”:

  1. 当您可以通过一系列独立的任务分解问题时。
  2. 当您可以通过清晰的工作流程(例如dataflow programming)将任务分解为一组任务时。

0
投票

Actor是异步的并发的,但是不能保证消息的执行顺序或时间限制。因此,原子事务不能拆分为参与者。

如果应用程序/任务不涉及任何可变状态,则Actor会过大,因为Actor框架会竭尽全力避免竞争条件。

© www.soinside.com 2019 - 2024. All rights reserved.