gpt4 book ai didi

java - 参与序列过程的 Akka Actor 的饥饿

转载 作者:行者123 更新时间:2023-12-02 12:48:24 24 4
gpt4 key购买 nike

双性逻辑

我们需要完成以下业务逻辑:

100 万次:

  1. 下载索引 i 中的文件
  2. 解压文件
  3. 从文件中提取一些信息
  4. 删除文件

当前 Akka 解决方案

我们目前拥有的 Akka 解决方案创建了 100 万个 Actor,他们负责下载一个文件,一旦下载完成,他们就会创建一个 Actor 来处理步骤 2、3、4。

问题

运行该流程后,我们遇到了这样的情况:Akka 优先考虑下载 Actor,而其余 Actor 则处于饥饿模式。

我们知道,当机器磁盘变满时,因为下载参与者不断下载,但其他参与者没有机会扫描和删除文件。

问题

  1. 有没有办法强制 Akka 不让 Actor 链上的 Actor 挨饿?
  2. 有没有办法告诉下载参与者等待,直到收到可以继续的通知(例如磁盘中的并行文件不超过 1000 个)

谢谢。

最佳答案

为两种类型的参与者使用不同的调度程序:

在您的配置中,您可以定义一个单独的调度程序(例如):

my-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
fixed-pool-size = 32
}
throughput = 100
}

然后您可以在创建时将其分配给特定的 Actor :

val myActor = context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1")

调度程序实际上是线程池。将这两个操作分开可以保证缓慢的阻塞操作不会导致另一个操作挨饿。一般来说,这种方法被称为批量标题,因为其想法是,如果应用程序的一部分出现故障,其余部分仍保持响应。

有关详细信息,请参阅 the documentation

关于java - 参与序列过程的 Akka Actor 的饥饿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44668898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com