【问题标题】:Observer Design Pattern: Few Questions观察者设计模式:几个问题
【发布时间】:2013-12-30 07:00:45
【问题描述】:

我正在研究观察者设计模式,并且有几个问题我没有明确的答案,所以如果有任何想法/想法,我将不胜感激。这专门针对多线程场景中的异步观察者回调:

  1. 什么是最好的设计方法,当它知道观察者可以在很短的时间间隔内接收到来自主题的多个事件通知时。因此,即使单个回调未完成,也很有可能获得多个通知。如何处理?如何有效地使用锁定?

  2. 当回调仍在执行时,如何处理取消订阅请求?在这种情况下如何避免死锁?

我想我们可以先开始讨论这个问题,相信随着答案的涌现,我们会有更多问题。感谢所有帮助!

【问题讨论】:

  • 你没有提到你希望观察者如何处理通知 - 同时,一个接一个?处理线程安全吗?
  • 处理通知的首选方式是并发。而且处理不是线程安全的。
  • 爆发有多大?每秒几个/每秒几百个?
  • 会有连续的流。可能是每秒 50-60 次左右。
  • 那么看来您需要检查生产者-消费者模式,而不是观察者模式。顺便说一句,什么语言?

标签: multithreading observer-pattern


【解决方案1】:

答案:

  1. 为了在第一个通知完成时处理多个通知,您可以考虑使用信号量和回调队列来确保在任何时间点只处理一个回调。完成后,基于 FIFO,将其丢弃并继续队列中的下一个回调。

  2. 1234563已退订。

【讨论】:

  • 一个信号量,你的意思是二进制信号量,即互斥量?
  • 取决于您的方案。 Wikipedia 定义说“信号量是记录特定资源有多少单位可用”。如果在您的情况下只有一个服务端点,那么当然是互斥体,否则是信号量。
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多