我有一个EventsManager
,它从外部来源接收事件。 Event
具有type
和value
。
侦听器可以注册到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 ...
不需要锁/同步