如何实现更复杂的生产者 - 消费者场景

时间:2016-12-15 14:02:38

标签: java algorithm performance priority-queue producer-consumer

首先,假设这样的场景:

  { Queue1: [taskA1, taskA2, taskA3, ... ] }
  { Queue2: [taskB1, taskB2, ... ] }
  ...
  { QueueN: [taskN1, ... ] }

这些队列包含不同数量的任务,其中任务是动态推送的。

其次,我们有一个用户列表:

  [ user1, user2, user3, ... ]

不同的用户拥有不同的队列权限,例如:

  { user1: { Queue1, Queue2, ... } }
  { user2: { Queue1 } }
  { ... }

第三,有条件:

  • 队列具有优先权,这意味着Queue1的任务必须在Queue2的任务之前完成。
  • 由于目前没有任务
  • ,某些队列可能为空
  • 优先级队列不可用,因为每个用户都想要尽可能多的任务
  • 系统内存和系统性能可以充分考虑,我们使用Gemfire
  • 因此无法使用多线程
  • 成千上万的用户,数以百计的队列

这是我们遇到的一个真正的问题,当我们的系统首次上线时,获取任务所需的时间不超过50毫秒。但随着用户和队列的增长,系统响应时间已增加到数百毫秒。我们尝试使用BitSet进行优化,但只有50%的性能得到了改善。

所以也许StackOverflow会有最终答案。

0 个答案:

没有答案