斯卡拉邮箱大小限制(scala mailbox size limit)

2019-08-31 22:57发布

我可以设置在斯卡拉演员的邮箱最大大小?

以生产者 - 消费者问题。 随着线程当缓冲区已满我可以阻止生产者。 我看到一对夫妇的Scala编写的生产者 - 消费者例子,它们都使用同作为“缓冲”邮箱演员。 我可以设置邮箱的大小,以使生产者要等到消费者准备好了? 任何其他优雅的解决方案,以避免邮箱不可控的增长?

Answer 1:

您可以创建作为生产者和消费者之间的缓冲的演员。 缓冲器检出其邮箱到其循环数据。 它发送回一个“过载”消息时缓冲产品的数量过高的生产者; 一旦一切都恢复,以便将“明确”的信息。 在太多的消息的情况下,它简单地丢弃传入的酮(或最旧的)。

消费者主动请求从缓冲区,这反过来又发回一个产品的产品。 如果缓冲区是空的,消费者持续等待输入。

生产者将产品发送到缓冲区演员。 如果它收到一个“过载”消息时,它可以停止生产,也可以继续生产,知道的事实,产品可能会下降。

当然,这种逻辑可能直接落实到生产者或消费者本身,而是一个独立的缓存可以让你更轻松地引入多个生产者和/或消费者。



Answer 2:

Actor.mailboxSize方法返回演员的邮箱未决的消息的数量。

这可以用于节流以各种方式生产。

例如,一种可能性是,

生产者检查消费者的mailboxSize是大于某一阈值。 如果是的话,它会发送一个SpecialMessage给消费者,并阻止一个信号量。 当消费者收到该SpecialMessage它释放的信号。 制片人现在可以欢快继续它的业务。

这避免了投票以及任何下降的消息。



文章来源: scala mailbox size limit