我有一个EventsManager,它从外部来源接收事件。 Event具有typevalue

侦听器可以注册到EventsManager,以获知某种事件类型的成功值。

对于给定类型的事件,EventsManager承诺两件事:


相同的值将不会连续发送两次(当通知侦听器时,可以保证他们收到的值与上一个通知的值不同)。
对于给定类型的事件,必须保留从外部源接收值的顺序。


我有一个可用的synchronized版本,但我想提高吞吐量。

典型用途:

实现该行为的最有效策略是什么(例如,我可以为每个事件类型使用一个队列/锁,并将其保存在ConcurrentMap中,但是拥有10k队列听起来并不是一个好主意)?
是否有任何现有的库会使用可伸缩的并发结构来做类似的事情?


示例:侦听器lst1想要侦听type1类型的事件
EventsManager收到:

event: type2, value: 2
event: type1, value: 1
event: type1, value: 1 //no change => discard
event: type3, value: 4
event: type1, value: 7


lst1应按以下顺序接收:1(仅一次)然后7

最佳答案

我将尝试实现此事件流


将所有传入事件放入初始EventQueue
EventDispatcherThread读取EventQueue,然后过滤事件并将其路由到每种类型的适当EventQueue中(队列的简单映射)
EventListernerThread的多个实例正在读取其类型的适当EventQueue ...


不需要锁/同步

07-26 07:56