В чём разница между threading и asyncio?

threading использует потоки ОС с общей памятью, asyncio — кооперативные задачи в цикле событий. Оба подходят для конкурентного I/O, но по-разному требуют организации кода и ожиданий.

Короткий ответ

Что ответить на собеседовании

threading использует потоки ОС с общей памятью, asyncio — кооперативные задачи в цикле событий. Оба подходят для конкурентного I/O, но по-разному требуют организации кода и ожиданий.

Подробный разбор

Ответ с пояснениями

threading использует потоки ОС с общей памятью, asyncio — кооперативные задачи в цикле событий. Оба подходят для конкурентного I/O, но по-разному требуют организации кода и ожиданий.

Потоки удобны для блокирующих библиотек, однако имеют затраты на стек и переключение и требуют locks для общих инвариантов. Asyncio хорошо масштабирует множество ожиданий при использовании неблокирующих API; один долгий синхронный вызов блокирует цикл. В обычном CPython GIL ограничивает параллельное исполнение Python-вычислений потоками, но не отменяет полезность I/O-конкурентности. Асинхронность тоже не устраняет гонки вокруг await. Выбор делают по библиотекам, нагрузке и сложности сопровождения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее