Как реализовать / Имитировать планировщик заданий?

Я хочу разработать базовый планировщик заданий, который будет принимать новые задания по мере их поступления в очередь, планировать их и переупорядочивать задания в соответствии с их требованиями.

Я попытался реализовать Планировщик как Очередь объектов, где объект имеет форму

class queueItem{
job j;
long start,end,duration;
Boolean isStart,isEnd;
}

Таким образом, это достойный подход для имитации планирования заданий или есть лучшая реализация для планирования списка заданий с учетом их начала, конца и продолжительности, скажем, с использованием одного из алгоритмов Pre-Emptive.
Это может быть на любом языке в этом отношении. Просто несколько советов о том, как подойти к нему было бы здорово.
Заранее спасибо 🙂

1

Решение

Это слишком просто для смысла планировщика.
— Каков характер планируемых работ?
— Каковы требования и стратегия для планирования?

В общем, планировщик состоит из нескольких логических компонентов

  1. Выбор работы, логика, чтобы выбрать следующую работу.
  2. переключение контекста, выполнение фактического переключения задания (сохранение / восстановление информации контекста, остановка / запуск заданий)
  3. триггер, это обычно таймер, но другие события также полезны.
  4. необязательно учет, который, в свою очередь, может предоставить статистику для выбора работы.

Чтобы система поддерживала упреждающее планирование, задания должны быть прерываемыми.

Для достойного планировщика, IMO, он должен поддерживать приоритеты, приостанавливать и блокировать события (время и другое событие).

Это может иметь следующую структуру данных:

  • СПИСОК активный […]; // массив списка заданий, один список на приоритет
  • СПИСОК спал; // приостановленные работы
  • СПИСОК ЗОМБИ; // закончил работу, ожидая очистки
  • JOB * current_job;
  • время истекло; истекшее время; // истекшее время с момента смены работы
  • квант времени; // бюджет текущей работы до следующего переключения

Нотабене Это может быть слишком упрощенным.

1

Другие решения


По вопросам рекламы [email protected]