Фон
Мое приложение работает со сторонним приложением, использующим ресурсы памяти и процессора в значительной степени .
Приложение получает «Задачи» из очереди. Процесс прост: удаление из очереди, обработка и постановка в очередь для дальнейшей очереди.
Некоторые факты:
- Каждая задача по-разному влияет на стороннее приложение, что приводит к разному потреблению ресурсов.
- Мое приложение должно работать на другом оборудовании. Итак, когда-нибудь вы получите 1 процессор, а в других случаях вы получите 10 процессоров. Вы знаете это только при запуске приложения. Таким образом, вы не можете спроектировать алгоритм для статического числа CPU.
- Вы не можете обновить \ изменить стороннее приложение.
- Вы не можете ожидать, является ли задача маленькой или большой, пока вы на самом деле ее не выполняете.
проблема
Основная цель - как можно скорее очистить очередь с существующим оборудованием.
Решение № 1 - Статический подход
Алгоритм:
- Рассчитать среднее значение выполнения задач на один процессор.
- Умножьте это число на номер процессора.
- Это будет число
thread
с, которое будет работать в вашем приложении.
- Каждый поток = 1 выполнение.
Минусы:
- Число
thread
с является статическим. Если вы получите большое количество длинных задач вместе - это число thread
s будет слишком большим. То же самое для большого количества небольших задач - тогда оно будет слишком низким.
Вопрос
Каким должен быть правильный подход для решения этой проблемы и обеспечения минимального времени работы при всех \ самых разных видах ввода?