应用架构:设计消耗所有机器资源

时间:2018-11-07 08:26:38

标签: multithreading architecture software-design

背景

我的应用程序正在与大量使用的内存和CPU资源的第三方应用程序一起使用。

应用程序正在从队列中获取“任务”。流程很简单:出队,处理和入队以进一步排队。

一些事实:

  1. 每个任务对第三方应用程序都有不同的影响,从而导致不同的资源消耗。
  2. 我的应用程序应在不同的硬件上运行。因此,有时您将获得1个CPU,而在其他情况下,您将获得10个CPU。您只有在启动应用程序时才知道。因此,您无法将算法设计为CPU的静态数量。
  3. 您无法升级\更改第三方应用程序。
  4. 在实际完成任务之前,您无法指望任务是大还是小。

问题

主要目标是使用现有硬件尽快清除队列。

解决方案1-静态方法

算法:

  1. 计算每个CPU的平均任务执行量。
  2. 将此数字乘以CPU编号。
  3. 这是将在您的应用程序上运行的thread的数量。
  4. 每个线程= 1个执行。

缺点:

  1. thread的数量是静态的。如果您还会收到大量的长任务-thread的数量将太高。对于大量的小任务也一样-然后它会太低。

问题

什么是解决此问题并在所有\最种类的输入中提供最少运行时间的正确方法?

0 个答案:

没有答案