Akka 2 中的调度程序有哪些差异和使用模式?

2024-06-18

我很难理解它们的差异和推荐用法Akka 2 中的调度程序 http://doc.akka.io/docs/akka/current/scala/dispatchers.html。我想我明白了平衡调度程序 http://doc.akka.io/api/akka/current/#akka.dispatch.BalancingDispatcher调用线程调度程序 http://doc.akka.io/api/akka/current/#akka.testkit.CallingThreadDispatcher表现良好,但我不知道调度员 http://doc.akka.io/api/akka/current/#akka.dispatch.Dispatcher and 固定调度程序 http://doc.akka.io/api/akka/current/#akka.dispatch.PinnedDispatcher.

我不明白这些概念Sharability and Bulkheading, 任何一个。


我认为可共享性是指可以共享特定类型调度程序的参与者的数量/类型。我不确定舱壁,但我假设它指的是某种参与者分区,您只希望一个参与者“拥有”一个线程。

以下是各种调度程序类型的代码/scaladoc 注释中的描述。如果需要更多说明,请描述不清楚的地方:

调度员:

基于事件的Dispatcher将一组 Actor 绑定到一个由BlockingQueue.

平衡调度程序:

基于执行器的事件驱动调度程序,它将尝试将工作从繁忙的参与者重新分配给空闲的参与者。假设使用此调度程序的同一实例的所有参与者都可以处理已发送到其中一个参与者的所有消息。 IE。参与者属于参与者池,并且对于客户端来说,无法保证哪个参与者实例实际处理给定的消息。

尽管此实现中使用的技术通常被称为“工作窃取”,但实际的实现可能最好被描述为“工作捐赠”,因为被窃取工作的参与者采取了主动。

固定调度程序:

为作为参考传入的每个参与者指定一个唯一的线程。通过其消息队列提供服务。

调用ThreadDispatcher(在akka.testkit中):

仅在当前线程上运行调用的调度程序。该调度程序不会创建任何新线程,但它可以在不同线程中同时用于同一参与者。调度策略是在当前线程上运行,除非目标 actor 已挂起或已在当前线程上运行(如果它在不同线程上运行,则该线程将阻塞,直到其他调用完成);如果调用未运行,则会在线程本地队列中排队,以便在调用堆栈上方的活动调用完成后执行。如果仅使用一个线程,这会导致完全确定的执行顺序。

挂起和恢复是一个参与者的全局操作,这意味着它们可以影响不同的线程,从而导致复杂性。如果消息在挂起期间排队(线程本地),则在恢复时运行它们的唯一线程是实际调用恢复方法的线程。因此,当前未耗尽的所有线程本地队列(这是可能的,因为挂起队列恢复可能完全在不同线程上的调用期间发生)被舀入当前线程本地队列,然后执行。可以从调用堆栈中暂停参与者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Akka 2 中的调度程序有哪些差异和使用模式? 的相关文章

  • 从 scala 的 Type 获取 ParameterizedType?

    有用的是 scala 的 Universe typeOf 保留了类的类型参数 import scala reflect runtime universe case class X T TypeTag val t typeOf T e g S
  • 如何将句子拆分为多个空格分隔的单词?

    下面的代码 val sentence 1 2 3 4 split 给我 Array 1 2 3 4 但我只想说 Array 1 2 3 4 当单词之间有多个空格分隔时 如何分割句子 使用正则表达式 scala gt 1 2 3 split
  • 为什么 Scala 选项的 foreach 比 get 更好?

    为什么使用foreach map flatMap等被认为比使用更好get对于 Scala 选项 如果我使用isEmpty我可以打电话get安全 好吧 这又回到了 告诉 不要问 考虑这两行 if opt isDefined println o
  • Scala:解决“非法循环引用”

    我正在尝试实现一个基于 HashMap 的树 它支持给定根键的 O 1 子树查找 为了实现这个目标 我正在努力做到以下几点 scala gt type Q HashMap Char Q
  • 如何将 JSON 转换为 Scala 中的类型

    我的问题是我收到来自 twitter 的 JSON 文本 然后我想将此文本转换为 scala 中的本机对象 有标准方法可以做到这一点吗 我也在用Play 2 这是我所拥有的 import scala io Source fromInputS
  • 理解无形状的“单态”示例

    The 无形特征概述 https github com milessabin shapeless wiki Feature overview 3a shapeless 2 0 0显示以下示例 import poly choose is a
  • SBT:具有不同依赖项的两个 Scala 版本的交叉构建项目

    我有以下用例 我想为 scala 2 10 和 2 12 构建相同的 Scala 项目 这样做时 我想指定所提供的 2 10 版本的一些依赖项 而我希望将这些依赖项编译到 2 12 的 jar 中 我正在查看 SBT 的文档 发现如何分割b
  • 获取 N 的素数列表

    我正在尝试编写一个函数 它接受一个 Int 并返回直到并包括该 Int 的所有素数 例如 8 的素数列表 List 3 5 7 这是我到目前为止所拥有的 def isPrime i Int Boolean if i lt 1 false e
  • 包含一些 F[_] 的元组/hlist 上的通用变换/折叠/映射

    我最近问映射并减少 折叠 scalaz Validation 的 HList https stackoverflow com questions 26410100 并得到了关于如何转换固定大小的元组的一个很好的答案Va T 这是一个别名sc
  • 使用intellij Scala编译错误

    我正在尝试使用 intelliJ 14 1 4 编译混合 java scala 代码 但它一直给我这个错误 Error Compiling SBT component compiler interface 2 9 2 52 0 我尝试降级我
  • 缓存隐式解析

    为了减少项目的编译时间 我缓存了通过隐式查找解析的某些类型类 但这看起来有点麻烦 因为直接的实现不起作用 scala gt implicit val x String implicitly String x String null 隐式查找
  • 如何将枚举绑定到 playframework 表单?

    我有一个以下形式的枚举 object MatchFilterType extends Enumeration type MatchFilterType Value val gt Value gt val lt Value lt val eq
  • 生成 k 个成对独立的哈希函数

    我正在尝试实施一个计数最小草图 http en wikipedia org wiki Count Min sketchScala中的算法 所以我需要生成k个成对独立的哈希函数 这是一个比我以前编写过的任何东西都低的级别 除了算法类之外 我对
  • 作为单例集合的选项 - 现实生活中的用例

    标题几乎概括了这一点 Option作为单例集合有时会令人困惑 但有时它允许一个有趣的应用程序 我脑子里有一个例子 并且想了解更多这样的例子 我唯一的例子是运行for对的理解Option List T 我们可以执行以下操作 val v Som
  • 方法返回类型的类型推断

    当存在显式方法时 为什么 Scala 无法推断方法的返回类型return方法中使用的语句 例如 为什么下面的代码可以编译 object Main def who 5 def main args Array String println wh
  • Scala 修饰符和类型参数化

    我正在创建一个记忆类 每个类都会记忆一个函数类型并具有以下定义 class MemoizedFunction1 T1 R f T1 gt R private this val cache mutable Map T1 R def apply
  • 超时对“Future”进行排序

    我利用了TimeoutScheduler介绍于Scala Futures 内置超时 https stackoverflow com questions 16304471 scala futures built in timeout 但是 现
  • 从单个字符串创建 Spark DataFrame

    我正在尝试采用硬编码字符串并将其转换为 1 行 Spark DataFrame 具有单列类型StringType 这样 String fizz buzz 将得到一个 DataFrame 其 show 方法如下 fizz buzz 迄今为止我
  • mssql 的 UUID 疯狂

    我的数据库条目有一个 UUID 及其值 使用 Microsoft SQL Server Management Studio 提取 CDF86F27 AFF4 2E47 BABB 2F46B079E98B 将其加载到我的 Scala 应用程序
  • JavaFX 控制器如何访问其他服务?

    我将 JavaFX 2 与 Scala 一起使用 我有class Application extends javafx application Application它执行诸如读取应用程序配置等操作 然后它会启动主窗口 该主窗口需要连接到一

随机推荐

  • Android 中的弹出消息

    我正在开发一个应用程序 我想创建一条弹出消息 在我们不关闭时该消息将保持稳定 我想要一些教程来帮助我制作警报对话框 提前致谢 我认为您正在搜索 对话框 框 从而可以向用户显示警报消息 确认消息等 欲了解更多信息 请参阅此 http deve
  • PowerShell,如何增加变量名称?

    我目前正在编写一个解析 XML 文件的 PowerShell 脚本 它将一些解析的值保存为变量以供以后使用 例如 假设我的 XML 如下所示
  • 数字或货币的字符串格式?

    我需要为每个千给出逗号 所以我用了DataFormatString 0 它运行良好 但当值为0 它正在显示 00 我只想只显示 0 我们怎样才能做到这一点 DataFormatString 0 C0 这将格式化为小数点后 0 位的货币 Da
  • PowerShell v4 中的本机内存泄漏?

    我安装的 PS v4 似乎存在泄漏 CLR版本 4 0 30319 34209构建版本 6 3 9600 17400 我运行以下命令 内存快速无限增长 while true New Object System Object 如果我跳出循环并
  • Chrome 支持 Brotli 吗? (Accept-Encoding不包含br)

    Can I use page http caniuse com search brotli说 Chrome 支持 brotli 一段时间了 我认为Accept Encoding字符串会是这样的 Accept Encoding gzip de
  • REST API 由于 CSRF 检查,同时发布两个具有不同属性的请求失败,状态代码为 403

    我使用 REST API 发送两个发布请求 http localhost 8111 app rest buildQueue但我的第二个请求失败了 403 Forbidden 由于 CSRF 检查失败而响应 403 状态代码 不存在 Orig
  • 带剖面的 3D 曲面图

    基本上 我有一个由一组时间序列组成的曲面图 我想在特定高度添加剖面图 以更好地了解一年中值高于所选阈值的时期 由此 其中显示平面但不是剖面 To This 有什么建议吗 使用 alpha 和相机仰角并没有解决问题 平面似乎仍然在人物的前面
  • 无法从外部访问在 docker swarm 上运行的容器

    我正在 docker swarm 上运行我的容器 资产前端service 是我的前端应用程序 它在容器内运行 Nginx 并公开端口 80 现在如果我这样做 curl http 10 255 8 21 80 http 10 255 8 21
  • 更改iOS11中的UISearchBar背景图片

    我想更改我的 UISearchBar 背景图像 当将它添加为我的 UITableView 中的标题视图时 它工作得很好 但是 当我想更改它以将 SearchBar 设置为 navigationItem 的 searchController
  • 使用 TypeScript 3 项目引用时出现“找不到模块”错误

    我想得到TypeScript 3 的项目参考正在工作 但很难从引用的项目中导入函数 我有一个ProjectA引用Shared 这是文件结构 ProjectA src person ts tsconfig json Shared src ut
  • 如何在pm2下运行nuxt?

    我有 2 个 nuxt 项目需要在服务器上运行 每当我在本地运行该应用程序时 它似乎都在使用 npm run dev 但在服务器上 这需要在子进程下运行 所以我使用 pm2 来实现 但是每当我开始使用 pm2 运行相同的 npm 脚本时 该
  • 从 Java 中的泛型类型推断泛型类型(编译时错误)

    我有一个带有以下泛型类型签名的静态函数T public static
  • 我们如何将 select 语句定义为 dbt 中的变量?

    您好 我正在尝试在 dbt 中的集合变量中定义 select 语句 谁能建议如何将 sql 查询设置为 dbt 中的变量以及如何访问下面的 CTE 中的这些变量 您可以使用call statement并将结果放入变量中load result
  • Azure逻辑应用程序计算价格

    我有这两个逻辑应用程序 逻辑应用1 动作 6 标准连接 2 运行次数 每 5 分钟或每 8640 次执行月 12 24 30 逻辑应用2 动作 3 标准连接 2 运行次数 每 2 分钟或每 21600 次执行 月 30 24 30 定价 根
  • jQuery 显示隐藏左侧滑动面板

    我希望在单击按钮时面板从浏览器的左边缘滑动 并在单击同一按钮 切换 时隐藏面板 Html div class panel div a href class slider arrow show raquo a CSS panel width
  • 异步提交或回滚事务范围

    正如许多人所知 TransactionScope当async await Net 中引入了模式 如果我们尝试使用一些它们就会损坏await在事务范围内调用 现在这个问题已经解决了 感谢范围构造函数选项 a 17527759 1178314
  • 使用 ruamel.yaml,如何使带有 NEWLINE 的变量成为不带引号的多行

    我正在生成用作协议的 YAML 其中包含一些生成的 JSON import json from ruamel import yaml jsonsample id 123 type customer account other myyamel
  • PHP/HTML - 如何在表单输入名称中保留空格?

    我有一个带有输入的表单type text和name属性中有空格 当表单提交时 它使用post 空格怎么保留 目前是用下划线替换空格 在输入名称中使用数组
  • 当我在 C 中将 long int 赋值给 int 时会发生什么?

    在最近的作业中 我被告知要使用long变量来存储结果 因为它可能是一个很大的数字 我决定在我的系统 英特尔酷睿 i5 64 位 Windows 7 gnu gcc 编译器 上检查这对我来说真的很重要 并发现以下代码 printf sizeo
  • Akka 2 中的调度程序有哪些差异和使用模式?

    我很难理解它们的差异和推荐用法Akka 2 中的调度程序 http doc akka io docs akka current scala dispatchers html 我想我明白了平衡调度程序 http doc akka io api