我有一个接收来自外部源的事件的EventsManager
。 Event
具有type
和value
。并发混合队列和听众
听众可以注册到EventsManager
以获知特定类型事件的成功值。
的EventsManager
承诺两件事情,给定类型的事件:
- 相同的值不会连续发送两次(当听众得到通知,他们保证他们获得的价值是与以前的通知不同的值)。
- 对于给定类型的事件,必须保留从外部源接收值的顺序。
我有一个工作版本,但我想提高吞吐量。
典型用途:< 1K听众,< 10K事件类型,每秒接收的(但大多数被丢弃,因为没有该类型的事件或值的注册的监听并没有改变)< 1M事件。
- 什么是实施这种行为(例如,我可以用一个队列/每个事件类型的锁,并保持它们的ConcurrentMap但有10K队列听起来不像是个好主意),最有效的战略是什么?
- 是否有任何现有的库可以使用可伸缩并发结构来做类似的事情?
示例:监听器lst1
想要收听类型type1
的事件管理接收的事件:
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
。
执行的事件类型有任何逻辑分组/共同性? – Woot4Moo
忘了补充,目前的吞吐量和预期是什么? – Woot4Moo
你可以假设不同的事件类型是独立的。说一种类型是汽车的速度,另一种是外部温度。同步版本的当前吞吐量约为每秒200k个事件。 – assylias