首页
学习
活动
专区
工具
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协同工作。

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

- Actor 与并发

Actor 是 Scala 基于消息传递的并发模型,虽然自 Scala-2.10 其默认并发模型的地位已被 Akka 取代,但这种与传统 Java、C++完全不一样的并发模型依旧值得学习。...如何使用 Actor 扩展 Actor 先来看看第一种用法,下面是一个简单例子及部分说明 //< 扩展超类 Actor class ActorItem extends 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

54110

Scala 【15 Actor 入门 】

Actor ​ Scala 的 Actor 类似于 Java 中的多线程编程。但是不同的是,Scala 的 Actor提供的模型与多线程有所不同。...Akka 也实现了类似 Scala Actor的模型,其核心概念同样也是 Actor。...Actor的创建、启动和消息收发 ​ Scala 提供了 Actor trait 来让我们更方便地进行 actor 多线程编程,Actor trait 就类似于 Java 中的 Thread 和 Runnable...我们只要重写 Actor trait 的 act 方法,即可实现自己的线程执行体,与 Java 中重写 run 方法类似。 ​ 此外,使用 start() 方法启动 actor;使用 !..."Li" 收发 case class 类型的消息 ​ Scala 的 Actor 模型与 Java 的多线程模型之间,很大的一个区别就是,Scala Actor 天然支持线程之间的精准通信;即一个 actor

24920

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关注,启动错误处理机制。

46830

漫谈并发编程:Actor模型

熟悉c和java并发编程的都会比较熟悉共享数据的策略,比如java程序员就会常用到java.util.concurrent包中同步、锁相关的数据结构。...什么是Actor模型 Actor的概念来自于Erlang,在AKKA中,可以认为一个Actor就是一个容器,用以存储状态、行为、Mailbox以及子Actor与Supervisor策略。...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.2K40

Akka 指南 之「Actor 系统」

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

79210

快学Actor编程

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

34310

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

区别是actor之间是完全隔离的,不共用内存区域。actor的私有状态不会被另外一个actor直接改变。 actor作为群体存在,单一的actor不是actor模式。...技术栈中的标准库 2.Akka: 为java和scala构建高度并发、分布式和弹性的消息驱动应用程序的工具包 Quasar(Java): 开源的JVM库 框架与语言 Actor 模型在 1973 年被提出...Akka 是一个为 Java 和 Scala 构建高度并发、分布式和弹性的消息驱动应用程序的工具包。Akka 框架基于 Actor 模型,提供了一个用于构建可扩展的、弹性的、快速响应的应用程序的平台。...Quasar (Java) 。 Quasar 是一个开源的 JVM 库,极大地简化了高度并发软件的创建。...Quasar 在线程实现时,参考了 Actor 模型,采用异步编程逻辑,从而为 JVM 提供了高性能、轻量级的线程,可以用在 Java 和 Kotlin 编程语言中.

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

84760

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线程效率更高的并发程序。...Java并发编程的问题 在Java并发编程中,每个对象都有一个逻辑监视器(monitor),可以用来控制对象的多线程访问。...Actor并发编程模型 Actor并发编程模型,是scala提供给程序员的一种与Java并发编程完全不一样的并发编程模型,是一种基于事件模型的并发机制。...Actor并发编程模型是一种不共享数据,依赖消息传递的一种并发编程模式,有效避免资源争夺、死锁等情况。 ? Java并发编程对比Actor并发编程 ?...---- 2.创建Actor 创建Actor的方式和Java中创建线程很类似,也是通过继承来创建。

50900

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

47220
领券