Планировщик ОС: состояние и виды работ потока
Состояние потока
Другой важной концепцией является состояние потока, которое определяет роль планировщика в отношении потока. Поток может находиться в одном из трех состояний: ожидание, готов к запуску или выполнение.
Waiting (ожидание): означает, что поток остановлен и ожидает чего-то, чтобы продолжить. Это может быть как ожидание оборудования (диск, сеть), операционной системы (системные вызовы), так и вызовы синхронизации (атомарные, мьютексы). Эти типы задержек являются основной причиной низкой производительности.
Runnable : означает, что потоку требуется время на ядре, чтобы он мог выполнять назначенные ему машинные инструкции. Если у вас много потоков, которым нужно время, то потоки должны ждать дольше, чтобы получить время. Кроме того, индивидуальное количество времени, которое получает каждый конкретный поток, сокращается, поскольку большее количество потоков конкурирует за время. Этот тип задержки планирования также может быть причиной низкой производительности.
Executing: означает, что поток был размещен на ядре и выполняет свои машинные инструкции. Показывает, что работа связанная с приложением уже ведется.
Виды работ потока
Существует два типа работы, которую может выполнять поток:
-
CPU-Bound;
-
IO-Bound.
CPU-Bound: работа, которая никогда не создает ситуации, где поток может быть помещен в состояние ожидания. Это работа, которая заключается в постоянном выполнении расчетов. Поток, вычисляющий число Pi до N-ой цифры, будет привязан к процессору.
IO-Bound: работа, которая заставляет потоки входить в состояние ожидания. Работа заключается в запросе доступа к ресурсу по сети или совершении системных вызовов в операционную систему. Поток, которому необходимо получить доступ к базе данных, будет привязан к вводу-выводу. Сюда можно включить события синхронизации (мьютексы, атомарные операции), которые ставят поток в состояние ожидания.