scala邮箱大小限制
我可以在Scala中为演员的邮箱设置最大尺寸吗?
采取生产者 - 消费者问题。 有了线程,我可以在缓冲区填满时阻止生产者。 我看到了一些用Scala编写的生产者 - 消费者示例,他们都使用带有用作“缓冲区”的邮箱的actor。 我可以设置邮箱大小,让生产者等待消费者准备好吗? 任何其他优雅的解决方案,以避免无法控制的邮箱增长?
您可以创建一个扮演生产者和消费者之间缓冲区的角色。 缓冲区检出其邮箱到它的循环数据。 当缓冲产品的数量太高时,它向生产者发送“过载”消息; 并且一旦所有事情都恢复顺序,就发送一个“清除”消息。 如果消息太多,它只会丢弃传入的消息(或最老的消息)。
消费者主动向缓冲区请求产品,然后再发回一种产品。 如果缓冲区为空,则消费者会一直等待输入。
生产者将产品发送给缓冲角色。 如果它收到“超载”消息,它可以停止生产,或者它可以继续生产,因为知道产品可能会被丢弃。
当然,这个逻辑可以直接实施到生产者或消费者本身,但是一个单独的缓冲区将允许您更容易地引入多个生产者和/或消费者。
Actor.mailboxSize
方法返回Actor的邮箱中的待处理消息的数量。
这可以用来以各种方式限制生产者。
例如,一种可能性可能是,
生产者检查消费者的mailboxSize
是否大于某个阈值。 如果是,那么它会向消费者发送SpecialMessage
,并阻塞信号量。 当消费者收到这个SpecialMessage
它释放信号量。 生产者现在可以愉快地继续它的业务。
这可以避免轮询以及任何丢弃的消息。
链接地址: http://www.djcxy.com/p/21501.html下一篇: Should sorting logic be placed in the model, the view, or the controller?