Zed*_*Zed 16
您可以创建一个充当生产者和消费者之间缓冲区的actor.缓冲区将其邮箱检出其循环数据.当缓冲产品的数量太高时,它会向生产者发回"过载"消息; 一切都按顺序返回并发出"清除"消息.如果消息太多,它只会丢弃传入的消息(或最旧的消息).
消费者主动从缓冲区请求产品,缓冲区又返回一个产品.如果缓冲区为空,则消费者继续等待输入.
生产者将产品发送到缓冲器actor.如果收到"过载"消息,它可以停止生产,或者可以继续生产,知道产品可能会被丢弃.
当然,这种逻辑可以直接实现到生产者或消费者本身,但是单独的缓冲区将允许您更容易地引入多个生产者和/或消费者.
该Actor.mailboxSize
方法返回Actor邮箱中的待处理消息数.
这可以用于以各种方式限制生产者.
例如,一种可能性是,
生产者检查消费者mailboxSize
是否大于某个阈值.如果是,则它将消息发送SpecialMessage
给消费者,并阻塞信号量.当消费者收到SpecialMessage
它时,它会释放信号量.制作人现在可以愉快地继续它的业务.
这可以避免轮询以及任何丢弃的消息.
归档时间: |
|
查看次数: |
2009 次 |
最近记录: |