Алгоритмы планирования операционной системы
Каков наилучший алгоритм для планирования приложения, которое будет поддерживать одновременные потоки 10K с интенсивным вводом-выводом, но низкой загрузкой ЦП? Ссылки на статьи приветствуются.
5 ответов
Почему бы вам не использовать SCHED_RR? Вы сами сказали: низкая загрузка процессора. Вы могли бы даже понравится процесс, когда вы ожидаете выполнить тяжелый ввод-вывод, поэтому вы планируете реже, чем другие процессы.
Однако, в общем, почему бы не позволить ОС делать то, что у нее лучше, и просто беспокоиться о написании эффективного кода? ОС будет знать, что вы делаете блокирующий вызов ввода / вывода, и поместит ваш поток / задачу в очередь ожидания и выберет другую задачу для запуска. Вам не нужно беспокоиться об этих деталях.
Вы, вероятно, захотите SCHED_RR для этого. Возможно, вам будет интересно прочитать этот вопрос о разнице между SCHED_FIFO и SCHED_RR.
Ваша проблема больше связана с планированием ввода / вывода, чем с планированием потоков. Ядро linux предлагает различные варианты планировщика ввода / вывода. Вы можете найти хорошую статью на эту тему в этом выпуске LWN.
На самом деле, я считаю, что ни один механизм планирования не справится с таким количеством потоков без ошибок, поскольку таблицы управления в ядре станут достаточно большими.
Если возможно, я бы предложил переписать приложение для использования асинхронного ввода-вывода, select() или чего-то подобного в выбранной вами ОС.
Как сказал Гровер, вы также можете использовать некоторые механизмы объединения потоков, которые требуют меньше ресурсов и решают ваши задачи, по крайней мере, до некоторой разумной степени, если не полностью