Что такое переключение контекста в Python
Что проверяют
Понимаете ли вы, что за словом «одновременно» в Python стоят три разных механизма с разной ценой, и знаете ли роль глобальной блокировки интерпретатора. Вопрос быстро выводит на выбор между потоками, процессами и корутинами.
Как отвечать
Переключение контекста это сохранение состояния одной задачи и передача процессора другой. Разбирать стоит по уровням.
Операционная система переключает потоки и процессы принудительно: сохраняет регистры, меняет стек, у процессов ещё и отображение памяти. Операция недешёвая, и чем больше потоков, тем большая доля времени уходит на саму перекладку и на промахи кэша.
Интерпретатор добавляет свой слой: потоки Python не исполняют байткод одновременно, блокировка отдаётся по истечении интервала переключения или на блокирующем вызове. Поэтому потоки выигрывают на ожидании и не выигрывают на счёте.
В asyncio переключение кооперативное и происходит только в точках ожидания, внутри одного потока. Регистры сохранять не нужно, цена близка к вызову функции, но любой блокирующий вызов останавливает весь цикл событий.
Вывод, ради которого задают вопрос: ввод-вывод отдают asyncio, блокирующие библиотеки уводят в пул потоков, счётную нагрузку в процессы или в расширение, которое отпускает блокировку на время работы.
Где спотыкаются
Говорят, что потоки выполняют код параллельно. Параллельно идёт только ожидание и участки в нативном коде, отпускающие блокировку. Чистый счёт на потоках не ускоряется, а иногда замедляется из-за борьбы за блокировку между потоками.
Ставят внутрь корутины синхронный сон или синхронный запрос по сети и удивляются, что всё встало. Без точки ожидания планировщик не получает управления, переключения не происходит, и один вызов держит все соединения сервиса.
Считают, что больше потоков значит быстрее, и заводят их сотнями. Растёт стоимость переключений и потребление памяти под стеки, пропускная способность падает; нужен ограниченный пул под измеренную нагрузку. Заодно путают переключение контекста с контекстными переменными и с менеджером контекста: одинаковое слово, разные вещи.