Архитектура приложения: дизайн, который потребляет все ресурсы машины - PullRequest
0 голосов
/ 07 ноября 2018

Фон

Мое приложение работает со сторонним приложением, использующим ресурсы памяти и процессора в значительной степени .

Приложение получает «Задачи» из очереди. Процесс прост: удаление из очереди, обработка и постановка в очередь для дальнейшей очереди.

Некоторые факты:

  1. Каждая задача по-разному влияет на стороннее приложение, что приводит к разному потреблению ресурсов.
  2. Мое приложение должно работать на другом оборудовании. Итак, когда-нибудь вы получите 1 процессор, а в других случаях вы получите 10 процессоров. Вы знаете это только при запуске приложения. Таким образом, вы не можете спроектировать алгоритм для статического числа CPU.
  3. Вы не можете обновить \ изменить стороннее приложение.
  4. Вы не можете ожидать, является ли задача маленькой или большой, пока вы на самом деле ее не выполняете.

проблема

Основная цель - как можно скорее очистить очередь с существующим оборудованием.

Решение № 1 - Статический подход

Алгоритм:

  1. Рассчитать среднее значение выполнения задач на один процессор.
  2. Умножьте это число на номер процессора.
  3. Это будет число thread с, которое будет работать в вашем приложении.
  4. Каждый поток = 1 выполнение.

Минусы:

  1. Число thread с является статическим. Если вы получите большое количество длинных задач вместе - это число thread s будет слишком большим. То же самое для большого количества небольших задач - тогда оно будет слишком низким.

Вопрос

Каким должен быть правильный подход для решения этой проблемы и обеспечения минимального времени работы при всех \ самых разных видах ввода?

...