java并发合并队列和侦听器
我有一个EventsManager
从外部源接收事件。一个Event
有一个type
和一个value
监听器可以注册到EventsManager
,以了解特定类型事件的后续值
对于给定类型的事件,EventsManager
承诺了两件事:
- 同一个值不会在一行中发送两次(当侦听器收到通知时,可以保证他们收到的值与之前的通知不同)李>
- 对于给定类型的事件,必须保留从外部源接收值的顺序李>
我有一个工作synchronized
版本,但我想提高吞吐量
典型用法:<;1k听众,<;10k活动类型,<;每秒接收1M个事件(但大多数被丢弃,因为没有为该类型的事件注册侦听器,或者该值没有更改)
- 实现该行为的最有效策略是什么(例如,我可以对每个事件类型使用一个队列/锁,并将它们保存在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
# 1 楼答案
我会尝试实现这个事件流
无需锁定/同步