首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

漫谈并发编程:Actor模型

由于目前Scala的使用频率较高,因此主要语言为Scala 主要分为下面几个部分: Actor模型的基本概念使用 讲一下akka框架中scala的基本使用,主要提几个重要的api 写几个例子帮助理解...什么是Actor模型 Actor的概念来自于Erlang,在AKKA中,可以认为一个Actor就是一个容器,用以存储状态、行为、Mailbox以及子Actor与Supervisor策略。...Mailbox相当于是一个小型的队列,一旦Sender发送消息,就是将该消息入队到Mailbox中。入队的顺序按照消息发送的时间顺序。Mailbox有多种实现,默认为FIFO。...消息和信箱 异步地发送消息是用actor模型编程的重要特性之一。消息并不是直接发送到一个actor,而是发送到一个信箱(mailbox)。如下图。 ?...虽然所有actor可以同时运行,但它们都按照信箱接收消息的顺序来依次处理消息,且仅在当前消息处理完成后才会处理下一个消息,因此我们只需要关心发送消息时的并发问题即可。

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

    大数据技术之_16_Scala学习_11_客户信息管理系统+并发编程模型 Akka+Akka 网络编程-小黄鸡客服案例+Akka 网络编程-Spark Master Worker 进程通讯项目

    当该 Actor 的 MailBox 接收到消息,就会调用 receive 方法   // 3. ...4、会在底层创建 Dispather Message,是一个线程池,用于分发消息,消息是发送到对应的 Actor 的 MailBox。...6、MailBox 实现了 Runnable 接口,是一个线程,一直运行并调用 Actor 的 receive 方法,因此当Dispather 发送消息到 MailBox 时,Actor 在r eceive..."hello" ,表示把 hello 消息发送到 SayHello Actor 的 Mailbox (通过Dispatcher Message 转发)。...3、当有消息到达 MailBox,就会去调用 Actor 的 receive 方法,即将消息推送给 receive 方法。

    1.9K30

    Akka 指南 之「邮箱」

    文章目录 邮箱 依赖 简介 邮箱选择 指定 Actor 的消息队列类型 指定调度器的消息队列类型 如何选择邮箱类型 默认邮箱 将哪个配置传递到邮箱类型 内置邮箱实现 邮箱配置示例 PriorityMailbox...通常,每个 Actor 都有自己的邮箱,但也有例外,如使用BalancingPool,则所有路由器(routees)将共享一个邮箱实例。...邮箱选择 指定 Actor 的消息队列类型 通过让某个 Actor 实现参数化接口RequiresMessageQueue,可以为某个 Actor 类型指定某种类型的消息队列。...注释:接口中的所需类型为 Actor 创建的邮箱中的队列类型,如果队列未实现所需类型,则 Actor 创建将失败。 指定调度器的消息队列类型 调度器还可能需要运行在其上的 Actor 使用的邮箱类型。...如果调度器需要如上所述的邮箱类型,那么将使用该要求的映射来确定要使用的邮箱类型。 将使用默认邮箱akka.actor.default-mailbox。

    1.6K30

    Akka 指南 之「配置」

    你可以修改的典型设置示例: 日志级别和日志记录器后端 启用远程处理 消息序列化程序 路由器的定义 调度员调整 Akka 使用「Typesafe Config Library」,这对于配置你自己的应用程序或使用或不使用...警告:如果你使用来自2.9.x系列的 Scala REPL 的 Akka,并且没有向ActorSystem提供自己的ClassLoader,那么使用-Yrepl-sync启动 REPL,以解决 REPLs...然后,Actor 系统合并在类路径根目录下找到的所有reference.conf资源,以形成可靠的(fallback)配置,即内部使用。...考虑到ConfigFactory.load()从整个类路径中合并所有具有匹配名称的资源,利用该功能区分配置层次结构中的 Actor 系统是最容易: myapp1 { akka.loglevel =...{ mailbox-type = "a.b.MyPrioMailbox" } 注释:特定 Actor 的部署部分由 Actor 相对于/user的路径标识。

    2.1K20

    苦涩的技术我该怎么学?Akka 实战

    稍微再补充两句,如上图所示在 Actor 模型系统中,主要有互不依赖的 Actor 组成(图中圆圈),Actor 之间的通信是通过消息来实现的,其中每个 Actor 都有一个 MailBox 来存储接收到的消息...Akka 是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的 Actor 模型应用。它已经成功运用在电信行业。...Akka 是 JAVA 虚拟机 JVM 平台上构建高并发、分布式和容错应用的工具包和运行时。Akka 用 Scala 语言写成,同时提供了 Scala 和 JAVA 的开发接口——摘自百度百科。...来自于内心的疑问:Actor 与 Actor 之间通过消息进行通讯,那么用于传输的消息实体该如何定义? ? 来自于灵魂的碰撞 1:拆分一句话的 Actor,该如何定义? ?...来自于灵魂的碰撞 2:统计每个单词出现次数的 Actor,该如何定义? ? 来自内心 + 灵魂的发问:该如何攒到一起? ? 第四步:代码写完了,是该一览尊荣的时候了。 ? 效果达到预期,杠杠滴!

    77710

    Akka(1):Actor - 靠消息驱动的运算器

    Akka的这些鲜明的特点都是通过消息驱动来实现的。 曾经看到一个关于Actor模式的观点:认为Actor并不适合并发(concurrency)编程,更应该是维护内部状态的运算工具。...我们在本篇先介绍一下ActorRef,Mailbox,State和Behavior。 1、ActorRef:Akka系统是一个树形层级式的结构,每个节点由一个Actor代表。...所以ActorRef是唯一的,代表了某个路径指向位置上的一个运行时的Actor实例,我们只能用ActorRef来向Actor发送消息 2、Mailbox:可以说成是一个运算指令队列(command queque...Actor从外部接收的消息都是先存放在Mailbox里的。系统默认Mailbox中无限数量的消息是按时间顺序排列的,但用户可以按照具体需要定制Mailbox,比如有限容量信箱、按消息优先排序信箱等。..."PriorityMailbox" } Actor101.scala: import akka.actor._ import akka.dispatch.PriorityGenerator import

    64560

    - Actor 与并发

    Actor 是 Scala 基于消息传递的并发模型,虽然自 Scala-2.10 其默认并发模型的地位已被 Akka 取代,但这种与传统 Java、C++完全不一样的并发模型依旧值得学习。..."actor test2" } } Actor是如何工作的 每个actor对象都有一个 mailbox,可以简单的认为是一个队列,用来存放发送给这个actor的消息。...当 actor 发送消息时,它并不会阻塞,而当 actor 接收消息时,它也不会被打断。发送的消息在接收 actor 的 mailbox 中等待处理,直到 actor 调用 receive 方法。...actor_receive.jpg 与线程的关系 Actor 的线程模型可以这样理解:在一个进程中,所有的 actor 共享一个线程池,总的线程个数可以配置,也可以根据 CPU 个数决定。...当一个 actor 启动后,Scala 分配一个线程给它使用,如果使用 receive 模型,这个线程就一直为该 Actor 所有。

    58010

    聊聊Akka

    它基于经典的Actor并发模型(即所有的消息都是基于Actor组件进行传递,后面我们会作详细介绍),拥有如下特点: 并行与并发:提供对并行与并发的高度抽象。...Akka架构体系 Akka采用Scala开发,运行于JVM之上,提供了Scala和Java两种API,目前所属Lightbend公司(原名Typesafe)。...Actor异步消息通信如图1-3所示。 ? 图1-3 Actor的异步消息通信 体系结构 Actor是Akka最核心的概念,也是最基本的执行单元,所以对Actor管理和监控的有效性是极为重要的。...邮箱 (Mailbox) 每个Actor都有自己的邮箱,所有其他Actor发送过来的消息都会进入该邮箱。Akka自带多种邮箱类型,也提供自定义邮箱的接口。...Akka底层采用Scala语言实现(JVM上另外一款明星语言),它基于Actor模型,在底层帮助开发者屏蔽了异步、消息通信、容错处理、网络服务、分布式集群等实现细节。

    2.2K30

    分布式计算模式之Actor,助你彻底搞定分布式计算技术

    Actor 的消息以邮件形式在多个 Actor 之间通信传递,每个 Actor 会有一个自己的邮箱(MailBox),用于接收来自其他 Actor 的消息,因此 Actor 模型中的消息也称为邮件。...Actor1 和 Actor3 先后向 Actor2 发送消息,消息被依次放入 Actor2 的 MailBox 队列的队尾 ; Actor2 从 MailBox 队列的队首依次取出消息执行相应的操作,...Message Dispatcher 将 MailBox 加入线程。需要注意的是,只有当 MailBox 是线程时,才能处理 MailBox 中的消息。...虽然 Actor 模型有上述的诸多优点,但它并不适用于分布式领域中所有的应用平台或计算框架。...Akka 是一个为 Java 和 Scala 构建高度并发、分布式和弹性的消息驱动应用程序的工具包。Akka 框架基于 Actor 模型,提供了一个用于构建可扩展的、弹性的、快速响应的应用程序的平台。

    2.4K50

    编码修炼 | 快速了解Scala技术栈

    它产生的影响力如此之大,甚至使得Scala语言从2.10开始,就放弃了自己的Actor模型,转而将AKKA Actor收编为2.10版本的语言特性。...AKKA的Actor模型参考了Erlang语言,为每个Actor提供了一个专有的Mailbox,并将消息处理的实现细节做了良好的封装,使得并发编程变得更加容易。...AKKA很好地统一了本地Actor与远程Actor,提供了几乎一致的API接口。...Twitter实现的Finagle是针对RPC通信,Akka则提供了内部的消息队列(MailBox),而由LinkedIn主持开发的Kafka则提供了支持高吞吐量的分布式消息队列中间件。...Spray对HTTP请求的内部处理机制实则是基于Akka-IO,通过IO这个Actor发出对HTTP的bind消息。例如: IO(Http) !

    2K60

    scala快速入门系列【Akka】

    本篇作为scala快速入门系列的第四十篇博客,为大家带来的是关于Akka的内容。 ?...Actor模型:在计算机科学领域,Actor模型是一个并行计算(Concurrent Computation)模型,它把actor作为并行计算的基本元素来对待:为响应一个接收到的消息,一个actor能够自己做出一些决策...,如创建更多的actor,或发送更多的消息,或者确定如何去响应接收到的下一个消息。...Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换信息的方式进行通信,每个Actor都有自己的收件箱(Mailbox)。..."connect" } } 好了,本期的分享就到这里了,另外scala快速入门系列暂时先告一个段落,感谢各位小伙伴的支持和鼓励!

    71120

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

    接受到的异步消息存在于actor内部的一个队列中,我们可以把它形象化的叫做邮箱(mailbox)。 Actor模型定义 一种分布式并行计算模型。...Actor工作原理 工作流程 Actor2从MailBox队列中依次取出Actor1和Actor3发送的消息执行相应的操作 消息传递流程 Actor的行为 当一个actor接受到消息后,它可以做如下事情...4.并发度高 每个 Actor 只需处理本地 MailBox 的消息,因此多个 Actor 可以并行地工作,从而提高整个分布式系统的并行处理能力。...技术栈中的标准库 2.Akka: 为java和scala构建高度并发、分布式和弹性的消息驱动应用程序的工具包 Quasar(Java): 开源的JVM库 框架与语言 Actor 模型在 1973 年被提出...Akka 是一个为 Java 和 Scala 构建高度并发、分布式和弹性的消息驱动应用程序的工具包。Akka 框架基于 Actor 模型,提供了一个用于构建可扩展的、弹性的、快速响应的应用程序的平台。

    2K20

    Akka(4): Routers - 智能任务分配

    Routing模式的特点是所有运算Actor的运算逻辑都是相同的,分别对不同的输入进行相同的运算。不过我们应该知道运算结果的顺序是无法预计的,毕竟Actor模式是典型的无序运算。...可以说Router不是标准的Actor,因为它不需要实现任何其它的功能,基本功能是预设嵌入的。Router的信箱直接代表了任务分配逻辑,与标准Actor逐个运算信箱中消息相比,能大大提高任务分配效率。...如此所有Routee都是Router的直属子级Actor,可以实现Router对Routees的直接监管。...运算结果显示:虽然出现了多次异常,router重启了f发生异常的Routee,所有消息都得到了处理。 Akka中有些routing模式支持Router-Pool Routee的自动增减。...下面是本次示范的完整源代码: import akka.actor._ import akka.routing._ import scala.annotation.tailrec import scala.concurrent.duration

    1K50

    PowerJob 原理剖析之 Akka Toolkit

    上面这段文字摘抄自 Akka 官网(akka.io),翻译成中文也就是:“Akka 是一个为 Java 和 Scala 构建高并发、分布式和弹性消息驱动应用程序的工具包”。...每一个 Actor 都由状态(State)、行为(Behavior)和邮箱(MailBox,其实就是一个消息队列)三部分组成: 状态:Actor 中的状态指 Actor 对象的变量信息,状态由 Actor...所有 Actor 之间不共享数据,只通过消息沟通,因此不用关心传统并发程序编写过程中的并发安全问题(因为根本没有共享的数据)。...三、Akka 简单使用 接下来是关于 Akka 的一个超简明教程,帮助大家初步理解并入门 Akka,其内容涵盖了所有 PowerJob 中用到的 API,也就是说,看懂这部分,源码中的 Akka 就不再可怕喽...~ 3.1 开发 Actor 首先,不得不提的一点是,Akka 从 2.6 版本开始,维护了 2 套 API(算上 Scala 和 Java 版本就 4 套了...看着IDE的智能提示就头大...)

    1.4K20
    领券