当前位置: 首页 > 知识库问答 >
问题:

使用PinnedDispatcher的Akka平衡池

巢嘉志
2023-03-14

我有几个数据库IO操作我想并发运行。在我的情况下,最好使用BalancingPool路由器。

  val router = context.actorOf(BalancingPool(5).withDispatcher("my-pinned-dispatcher").props(Props[History]), "HistoryBalancingRouter")

我的示例是否是使用线程池执行器实现BalancingPool的明智方法?

共有1个答案

冯宪
2023-03-14

BalancingPool总是与BalancingDispatcher一起工作,它将简单地拒绝您的PinnedDispatcher设置。原因正是BalancingDispatcher允许参与者共享其他Dispatcher不支持的公共邮箱(为了性能)。

请注意,有几个Dispatcher允许您配置它们将在内部使用的Executor。默认情况下,对于BalancingPool来说,它是fork-join-executor(文档错误地表示为“fork-join-dispatcher”),但您可以将其更改为使用thread-pool-executor。dispatcher配置示例如下:http://doc.akka.io/docs/akka/2.3.13/scala/dispatcher.html#setting_the_dispatcher_for_an_actor您只需更改执行器类型

 类似资料:
  • web-service预期会有很多调用,而我希望在出现故障时使该服务成为冗余,因此我希望有两个实例同时运行以处理所有请求。 1)让两个级别的Web服务同时处理请求的最佳方法是什么?使用外部负载均衡器还是使用AKKA/AKKA-HTTP中的某种魔法(我不知道)? 2)我必须调整哪些主要参数来提高性能?

  • 下面是我的用例: 我想创建一个大小为x的平衡池路由器(x是在运行时确定的实例/路由的数量),每个路由都有自己的专用线程。期望每个路由执行阻塞操作。 Akka文档解释了您不能更改平衡池的调度程序。这就排除了使用固定的调度器的选项(它可以满足我的需要,每个路由大小为1的线程池)。 来自Akka文档: BalancingPool自动为其路由使用一个特殊的BalancingDispatcher,而不考虑路

  • 我正在使用编写负载均衡器。 负载平衡器侦听本地传输地址。就Netty而言,只创建了一个频道来监听该地址。然后,(单线程事件循环组的)单线程将传入的UDP数据包调度到工作线程池进行处理(这里,处理意味着执行负载平衡)。 在出站端,可以使用多个服务器。对于每个接收到的UDP数据包,关联的工作线程选择一个服务器,并将UDP数据包转发到此服务器。为了转发UDP数据包,需要一个通道。 我可以看到四种方法:

  • 我正在解决“破解编码面试”中的以下问题:实现一个函数来检查二叉树是否平衡。平衡树是这样一种树:任何节点的两个子树的高度相差不会超过一个。 这本书的示例解决方案(复制如下)假设从节点发出的树是平衡的,如果(a)节点的左子树和右子树是平衡的;和(b)节点本身是平衡的。我在试图理解为什么会这样?以上两个条件的满足如何证明从节点发出的整个树是平衡的? 谢啦

  • 关于如何解决此错误的建议,以便我可以使用最新版本的akka、akka streams和akka HTTP?谢了!

  • 你们好,伙计们,我正在试图理解我如何看到二叉树是否平衡。我试图打印出cout语句,以便进一步理解它,但运气不好。 算法的想法是,如果它返回-1,它就不平衡,如果它返回其他任何东西,它是平衡的。 然而,我并没有真正理解这个算法是如何工作的。但是我想知道的一些事情是; 我的困惑点在于以下代码行: 如果 (根 == 空) 返回 0; 当它返回 0 时会发生什么,何时达到 0?它只是为了防止递归继续转到未