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