Каков механизм переключения потоков в операционной системе

Ответ

Современные ОС используют механизм вытесняющей многозадачности (preemptive multitasking). Ключевую роль в нём играет планировщик ОС (OS scheduler), который принудительно приостанавливает один поток и запускает другой. Этот процесс называется переключением контекста (context switch).

Переключение происходит по нескольким причинам:

  1. Истечение кванта времени: Потоку выделяется небольшой промежуток времени (квант) для работы на CPU. Когда он заканчивается, планировщик передает управление другому потоку.
  2. Блокирующая операция: Поток сам уходит в состояние ожидания, например, при чтении файла с диска или ожидании ответа по сети. В этот момент ОС немедленно переключается на другой готовый к выполнению поток.
  3. Приоритеты: Поток с более высоким приоритетом может «вытеснить» поток с низким приоритетом.
  4. Аппаратные прерывания: Внешние события (например, ввод с клавиатуры) вызывают прерывание, в ходе обработки которого планировщик может принять решение о переключении потоков.

Пример на Python, иллюстрирующий вытеснение:

import threading
import time

def worker(name):
    print(f"Поток {name}: начал работу.")
    # Бесконечный цикл, имитирующий активную работу
    # ОС будет принудительно переключаться между потоками
    i = 0
    while i < 5_000_000:
        i += 1
    print(f"Поток {name}: завершил работу.")

t1 = threading.Thread(target=worker, name="A")
t2 = threading.Thread(target=worker, name="B")

t1.start()
t2.start()

t1.join()
t2.join()

Даже без time.sleep() или операций ввода-вывода, ОС будет переключать управление между t1 и t2, чтобы обеспечить их параллельное выполнение.