gpt4 book ai didi

c# - 我如何调整生产者 Actor 的节奏,使其不会向消费者 Actor 发送太多消息

转载 作者:行者123 更新时间:2023-11-30 23:29:31 24 4
gpt4 key购买 nike

我有一个生成 UpdateItemMessage 的 actor,此消息由多个子 actor 使用。我的问题是 Producer 比 consumer actors 快,它生成的消息比 child actors 可以消费的多得多,因此我想跟上 producer 的步伐。我尝试做的是使用 Become() 和 Unbecome() 来指示忙/闲状态。 parent /制作人查询 child Actor 状态的最佳做法是什么。

  • Producer 调用 Ask for each item in Context.GetChildren() ?
  • 消费者在将状态切换为忙碌时告诉生产者?

最佳答案

有很多方法可以做到这一点。一旦流式 API 正确移植到 akka.net,做这样的事情可以说会更容易。

例如,假设您的制作人是一个从磁盘文件中读取内容的 Actor 。每行/项目代表一些需要完成的工作完毕。您分配给多个工作人员。

我会让工作人员向生产者发回确认消息(通过 Sender.Tell)。

然后我会让生产者以固定大小(例如 500)分批读取行。之后,它通过为自己安排一条消息来安排要读取的下一批。 (通过调度程序这样,您可以通过使生产者 actor 能够从您的 worker actor 接收 ack 来释放它。然后,您可以在生产者 actor 中保持状态,了解它发送了多少以及完成了多少工作。

此时很容易确定您的 worker 是否准备好进行下一批工作,或者您需要稍等一下。

另一种方法是您通过代理参与者与您的工作人员沟通。那会为你节流。 (与 producer 示例中的方式相同,通过结合 worker ack 记录完成了多少工作)。这样做的缺点是节流器 actor 会有效地缓冲生产者向它抛出的所有消息。

关于c# - 我如何调整生产者 Actor 的节奏,使其不会向消费者 Actor 发送太多消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35368886/

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