При блокирующем I/O поток часто ждёт ответа сети, диска или другого внешнего ресурса, не выполняя полезные вычисления. В это время другой поток может использовать CPU.
Что именно ожидается при блокирующей операции, из-за чего потоки дают выигрыш в I/O-bound сценариях?
При блокирующем I/O поток часто ждёт ответа сети, диска или другого внешнего ресурса, не выполняя полезные вычисления. В это время другой поток может использовать CPU.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
При блокирующем I/O поток часто ждёт ответа сети, диска или другого внешнего ресурса, не выполняя полезные вычисления. В это время другой поток может использовать CPU.
Например, после отправки SQL-запроса приложение ждёт, пока БД обработает его и вернёт данные. Блокирующий системный вызов переводит поток в ожидание, а соответствующие операции CPython обычно освобождают GIL. Поэтому несколько потоков могут перекрывать такие паузы. Это не ускоряет сам удалённый сервис и не снимает ограничения пула соединений. Если функция на самом деле выполняет длительный Python-цикл, а не ждёт I/O, обычные потоки не дают такого же выигрыша.