Алгоритмы планирования операционной системы - PullRequest
3 голосов
/ 31 марта 2009

Какой алгоритм лучше всего использовать для планирования приложения, которое будет поддерживать 10K одновременных потоков с интенсивным вводом-выводом, но низкой загрузкой ЦП? Ссылки на статьи приветствуются.

Ответы [ 5 ]

4 голосов
/ 31 марта 2009

Почему бы вам не использовать SCHED_RR? Вы сами сказали: низкая загрузка процессора . Вы могли бы даже понравится этот процесс, когда ожидаете выполнить тяжелый ввод-вывод, поэтому вы планируете его реже, чем другие процессы.

В общем, почему бы не позволить ОС делать то, что у нее лучше, и просто беспокоиться о написании эффективного кода? ОС будет знать, что вы делаете блокирующий вызов ввода / вывода, и поместит ваш поток / задачу в очередь ожидания и выберет другую задачу для запуска. Вам не нужно беспокоиться об этих деталях.

1 голос
/ 15 апреля 2009

Ваша проблема больше связана с планированием ввода / вывода, чем с планированием потоков. Ядро linux предлагает различные варианты планировщика ввода / вывода. Вы можете найти хорошую статью на эту тему в этом издании LWN.

1 голос
/ 01 апреля 2009

Вы, вероятно, захотите SCHED_RR для этого. Возможно, вам будет интересно прочитать этот вопрос о разнице между SCHED_FIFO и SCHED_RR .

1 голос
/ 31 марта 2009

На самом деле я считаю, что ни один механизм планирования не будет обрабатывать такое количество потоков без ошибок, так как таблицы управления в ядре станут довольно большими.

Если возможно, я бы предложил переписать приложение для использования асинхронного ввода-вывода, select () или чего-то подобного в выбранной ОС.

0 голосов
/ 01 апреля 2009

Как предложил Гровер, вы также можете использовать некоторые механизмы пула потоков, которые менее ресурсоемки и решат ваши задачи по крайней мере до некоторой разумной степени, если не полностью

...