gpt4 book ai didi

java - 并发合并队列和监听器

转载 作者:行者123 更新时间:2023-11-30 09:28:45 28 4
gpt4 key购买 nike

我有一个 EventsManager 从外部源接收事件。 事件 有一个类型 和一个

可以将监听器注册到 EventsManager 以通知特定类型事件的连续值。

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

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

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

典型用途:< 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. 所有传入事件都放入初始EventQueue
  2. EventDispatcherThread 读取 EventQueue,并将事件过滤并路由到适合每种类型的EventQueue(队列的简单映射)<
  3. EventListernerThread 的多个实例正在读取其类型的相应 EventQueue...

不需要锁/同步

关于java - 并发合并队列和监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13878585/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com