Skip to content

Планировщик ОС: сценарий решения о планировании

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

Ты запускаешь приложение, и основной поток создается и выполняется на ядре 1. Когда поток начинает выполнять свои инструкции, извлекаются строки кэша, поскольку требуются данные. Теперь поток решает создать новый поток для некоторой параллельной обработки. Вот вопрос.

Как только поток создан и готов к работе, планировщик должен:

  1. Переключить контекст основного потока с ядра 1? Это может повысить производительность, поскольку вероятность того, что этому новому потоку потребуются те же данные, которые уже кэшированы, довольно высока. Но основной поток не получает свой полный временной интервал.

  2. Должен ли поток ждать, пока ядро 1 станет доступным в ожидании завершения кванта времени основного потока? Поток не запущен, но задержка при получении данных будет устранена после его запуска.

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

Уже весело? Это интересные вопросы, которые планировщик ОС должен учитывать при принятии решений по планированию. Если есть свободное ядро, оно будет использовано.

Теперь ты знаешь, что нужно учитывать в отношении потоков и планировщика ОС при написании многопоточных приложений. Это то, что планировщик Go также принимает во внимание.

Рекомендуем изучить дополнительные материалы по теме: