我有一个EventsManager
从外部源接收事件。一个Event
有一个type
和一个value
。
侦听器可以注册到EventsManager
以被告知某种类型事件的连续值。
对于EventsManager
给定类型的事件,承诺两件事:
- 相同的值不会连续发送两次(当侦听器收到通知时,他们保证收到的值与上一次通知的值不同)。
- 对于给定类型的事件,必须保留从外部源接收值的顺序。
我有一个工作synchronized
版本,但我想提高吞吐量。
典型用途:< 1k 侦听器,< 10k 事件类型,< 1M 每秒接收的事件(但大多数被丢弃,因为没有为该类型事件注册的侦听器或值未更改)。
- 实现该行为的最有效策略是什么(例如,我可以为每种事件类型使用一个队列/锁并将它们保存在 ConcurrentMap 中,但拥有 10k 个队列听起来不是一个好主意)?
- 是否有任何现有的库可以使用可扩展的并发结构做类似的事情?
示例:Listenerlst1
想要监听type1
EventManager 接收到的事件类型:
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
仅一次) then 7
。