首页
学习
活动
专区
工具
TVP
发布

Actor模型

Actor模型的理念非常简单:万物皆Actor Actor模型将Actor当作通用的并行计算原语:一个参与者Actor对接收到的消息做出响应,本地策略可以创建出更多的参与者或发送更多的消息,同时准备接收下一条消息...Actor必须通过消息传递进行通信 一个Actor可以响应消息、退出新Actor、改变内部状态、将消息发送到一个或多个Actor。...Actor可能会堵塞自己但Actor不应该堵塞自己运行的线程 Actor参与者 Actor Actor的概念来自于Erlang,在AKKA中可以认为一个Actor就是一个容器,用来存储状态、行为、邮箱...在Actor模型中一切都是Actor,所有逻辑或模块都可以看成是Actor,通过不同Actor之间的消息传递实现模块之间的通信和交互。...Actor模型方式 使用Actor模型方式会将此过程拆分成多个模块,即拆分成多个Actor。每个Actor负责不同部分,并通过消息传递让多个Actor协同工作。

68410
您找到你想要的搜索结果了吗?
是的
没有找到

- Actor 与并发

如何使用 Actor 扩展 Actor 先来看看第一种用法,下面是一个简单例子及部分说明 //< 扩展超类 Actor class ActorItem extends Actor { //< 重载..."actor test2" } } 输出: actor test1 这种用法在实际中并不常用,需要: 扩展超类 Actor 重载 act 方法 调用扩展类对象 start 方法 使用 scala.actors.Actor.actor..."actor test2" } } 输出: actor test1 这里需要特别注意的是,actor 其实是scala.actors.Actoractor 方法,并不是 scala 语言内建的。...这种使用方法更加方便,与第一种扩展超类 Actor 有以下几点不同: 使用 Actor.actor 方法(返回类型为Actor)而不是扩展 Actor 并重载 act 方法 构造完成即启动,不需要调用..."actor test2" } } 输出: actor test1 持续处理消息 如果你仔细观察,就会发现上面的每个示例中,都向 actor 发送了"actor test1"和"actor test2

53710

Actor模型速览

Actor模型的基本概念 Actor的核心在于发送消息和接受消息。...每一个Actor系统之间的联络都依靠消息的传递,假设现在有两个Actor系统A和B,A会向B发送了一条消息打招呼,或者是通知B要完成某个任务,注意在这里,Actor模型和线程同步模型不同的是A在发送完消息后...Actor Supervisors and Workers 一个actor是可以创造另一个actor,此时的创造者称为Supervisor,被创造的Actor称为Worker,类似于下面: ?...Actor的拓展 Actor的可拓展性来源于Supervisor和Worker的工作模式,并且超时机制也在这里面发挥了重要作用。...Actor系统之间会通过心跳机制互相监控,一旦其中一个actor挂了就会引起其它actor关注,启动错误处理机制。

46430

漫谈并发编程:Actor模型

什么是Actor模型 Actor的概念来自于Erlang,在AKKA中,可以认为一个Actor就是一个容器,用以存储状态、行为、Mailbox以及子Actor与Supervisor策略。...0x02 Akka中的Actor 我们会用到Akka框架提供的Actor,因此在这里先大致介绍一下Akka中的Actor使用方式。...Actor System Actor System是进入AKKA世界中的一个入口,也可以看做是Actor的系统工厂或管理者,掌控者Actor的生命周期,包括创建、停止Actor,当然也可以关闭整个ActorSystem...在AKKA中,parent actor就是child actor的supervisior,这意味着parent actor能够掌控child actor的整个生命周期。...Actor的生命周期 AKKA为Actor生命周期的每个阶段都提供了一个钩子(hook)方法,我们可以通过观察自定义Actor需要重写的方法来理解Actor的生命周期。

2.1K40

Akka 指南 之「Actor 系统」

Actor 系统 Actor 是封装状态和行为的对象,它们通过交换放在收件人邮箱中的消息进行专门的通信。...没有单一的最佳解决方案,但有一些指导方针可能会有所帮助: 如果一个 Actor 管理另一个 Actor 正在做的工作,例如通过传递子任务,那么管理 Actor 应该监督子 Actor。...如果一个 Actor 携带非常重要的数据(即,如果可以避免,其状态不会丢失),则该 Actor 应向其监督的子 Actor 找出任何可能危险的子任务,并处理这些子 Actor 的故障。...如果一个 Actor 依靠另一个 Actor 来履行职责,它应该观察另一个 Actor 的活动(liveness),并在接到终止通知后采取行动。...这将停止守护者 Actor,而守护者 Actor 又将递归地停止其所有子 Actor,即系统守护者(system guardian)。

77110

快学Actor编程

package actor import akka.actor....每个Actor是一个计算实体,映射接收到的消息并执行以下动作:发送有限个消息给其他Actor、创建有限个新的Actor、为下一个接收的消息指定行为。...因此,可以把系统中所有事物都抽象成为一个ActorActor的输入是接收到的消息 Actor接收到消息后处理消息中定义的任务 Actor处理完成任务后可以发送消息给其它Actor 在一个系统中可以将一个大规模的任务分解为一些小任务...行为(behavior):行为指定的是actor中计算逻辑,通过actor接收到的消息来改变actor的状态。...Actor必须通过消息传递进行通信 一个Actor可以响应消息、退出新Actor、改变内部状态、将消息发送到一个或多个ActorActor可能会堵塞自己但Actor不应该堵塞自己运行的线程

33410

Actor 分布式并行计算模型: The Actor Model for Concurrent Computation

区别是actor之间是完全隔离的,不共用内存区域。actor的私有状态不会被另外一个actor直接改变。 actor作为群体存在,单一的actor不是actor模式。...在actor模型中,actor是唯一组成部分,actor带有地址以便互相发送消息。 actor按次序处理消息,比如你发送三个消息给一个actor,它们不会被并发处理。...Actor模型通过异步消息模式,实现分布式系统的高并发 Actor计算模式 Actor模型的三要素: 状态:Actor组件本身的信息 行为:Actor的计算处理操作 消息:Actor的消息以邮件的形式在多个...Actor工作原理 工作流程 Actor2从MailBox队列中依次取出Actor1和Actor3发送的消息执行相应的操作 消息传递流程 Actor的行为 当一个actor接受到消息后,它可以做如下事情...actor之间的隔离性导致actor失败不会影响其他actor,监控者可以对自然失败的actor做直接处理而不会带来连锁问题。

1.4K20

Akka(3): Actor监管 - 细述BackoffSupervisor

在上一篇讨论中我们谈到了监管:在Akka中就是一种直属父子监管树结构,父级Actor负责处理直属子级Actor产生的异常。...实际上BackoffSupervisor与定义了supervisorStrategy的Actor有所不同。我们应该把BackoffSupervisor看作是一个一体化的Actor。...当然,它的实现方式还是由一对父子Actor组成。监管策略(SupervisorStrategy)是在BackoffSupervisor的内部实现的。...从外表上BackoffSupervisor就像是一个Actor,运算逻辑是在子级Actor中定义的,所谓的父级Actor除监管之外没有任何其它功能,我们甚至没有地方定义父级Actor的功能,它的唯一功能是转发收到的信息给子级...BackoffSupervisor.getCurrentChild //要求supervisor返回当前子级Actor var innerChild: Option[ActorRef] = None

82360

Dapr Actor 的微服务架构

Dapr中的Actor模型,和Orleans的Virtual Actor一脉相传, 圣杰写过一篇文章Orleans 知多少 | .NET Core 分布式框架介绍过。...一个应用/服务由多个Actor组成,每个Actor都是一个独立的运行单元,拥有隔离的运行空间,在隔离的空间内,其有独立的状态和行为,不被外界干预,Actor之间通过消息进行交互,而同一时刻,每个Actor...Actor模型大大简化了并发编程的复杂度,Dapr在Actor运行时中提供了许多功能,包括并发控制,状态管理,生命周期管理如Actor的激活/停用以及用于唤醒Actor的Timer(计时器)和Reminder...对于使用者,我们可以根据任意名称去获取一个Actor(无论它是否存在),然后就可以发送消息给这个Actor(无论它在哪里)。...不过Erlang同属Actor模型,跟Dapr Actor 就比较像,但也有一个差别:Erlang是显式创建Actor,Dapr Actor 是隐式创建(用户不需要主动创建,你调用它,它就必然存在);所以从编码上来看

1.1K20

.NET的Actor模型:Orleans

和现有的基于actor平台有本质差异,它是把Actor作为虚拟实体,而不是实际物理的。 首先,一个Orleans的Actor总是存在的,但是它不能被显式地创建或销毁。...第二,Orleans Actor是自动实例化:如果内存没有Actor实例,它会自动创建,发送到Actor的一个消息是当前服务器上创建一个新的实例。...一个actor实例从来不会失败: 如果服务器S崩溃, 发送给这个S中Actor的下一个消息将被自动实例化到另外一个服务器A,消除应用程序需要监督和人为编码显式地重建失败的Actor。...第三,Actor的位置实例对应用程序代码是透明的,这极大地简化了编程。 第四,Orleans可以自动创建多个实例相同的无状态的ActorActor可以无缝地热扩展。...Orleans给开发人员一个虚拟"Actor空间",类似于虚拟内存,使他们能够调用系统中的任何Actor,不管它是否存在于内存。虚拟化间接依赖从虚拟Actor到实际Actor的映射。

1.2K60

scala快速入门系列【Actor并发编程】

---- Actor并发编程 1.Actor介绍 scala的Actor并发编程模型可以用来开发比Java线程效率更高的并发程序。...使用方式 定义class或object继承Actor特质 重写act方法 调用Actor的start方法执行Actor [NOTE] 类似于Java线程,这里的每个Actor是并行执行的 示例...创建两个Actor,一个Actor打印1-10,另一个Actor打印11-20 使用class继承Actor创建(如果需要在程序中创建多个相同的Actor) 使用object继承Actor创建(如果在程序中只创建一个...Actor) 参考代码 使用class继承Actor创建 object _05ActorDemo { class Actor1 extends Actor { override def act....start() new Actor2().start() } } 使用object继承Actor创建 object Actor1 extends Actor { override

50100

Actor模型和CSP模型的区别

首先这两者都是并发模型的解决方案,我们看看Actor和Channel这两个方案的不同: Actor模型   在Actor模型中,主角是Actor,类似一种worker,Actor彼此之间直接发送消息,不需要经过什么中介...Actor模型描述了一组为了避免并发编程的常见问题的公理:   1.所有Actor状态是Actor本地的,外部无法访问。   2.Actor必须只有通过消息传递进行通信。     ...3.一个Actor可以响应消息:推出新Actor,改变其内部状态,或将消息发送到一个或多个其他参与者。   4.Actor可能会堵塞自己,但Actor不应该堵塞它运行的线程。...Actor模型和CSP区别   Actor模型和CSP区别图如下: ?   Actor之间直接通讯,而CSP是通过Channel通讯,在耦合度上两者是有区别的,后者更加松耦合。   ...CSP好处是Channel不需要缓冲消息,而Actor理论上需要一个无限大小的邮箱作为消息缓冲。

1.6K10

scala快速入门系列【Actor实现WordCount】

本篇作为scala快速入门系列的第三十九篇博客,为大家带来的是关于如何用Actor实现WordCount的内容。 ?...---- WordCount案例 接下来,我们要使用Actor并发编程模型实现多文件的单词统计。...案例介绍 给定几个文本文件(文本文件都是以空格分隔的),使用Actor并发编程来统计单词的数量 ? ? 思路分析 ?...步骤2 | 创建WordCountActor 实现思路 根据文件数量创建WordCountActor,为了方便后续发送消息给Actor,将每个Actor与文件名关联在一起 实现步骤 创建...WordCountActor 将文件列表转换为WordCountActor 为了后续方便发送消息给Actor,将Actor列表和文件列表拉链到一起 打印测试 参考代码 MainActor.scala

46620
领券