В чем разница между потоками и механизмом async/await в Python
Python
Senior
Без компании
В чем разница между потоками и механизмом async/await в Python
Ответы
Потоки (`threading`) и async/await работают с конкурентностью, но по-разному:
- **Потоки** используют системные потоки ОС, переключаются планировщиком. Подходят для CPU-bound задач, но имеют накладные расходы на переключение и проблемы с GIL (Global Interpreter Lock), который ограничивает параллельное выполнение Python-кода.
- **Async/await** (asyncio) — однопоточный механизм, переключает задачи на уровне событийного цикла. Эффективен для IO-bound задач (сетевые запросы, файловые операции), но не подходит для CPU-bound операций, так как не использует дополнительные ядра.
**Пример с потоками:**
```
import threading
def task():
print("Thread running")
thread = threading.Thread(target=task)
thread.start()
```
**Пример с asyncio:**
```
import asyncio
async def task():
print("Coroutine running")
await task() # в асинхронной функции
```
**Выбор зависит от задачи:** потоки — для параллелизма с GIL, async — для эффективного ожидания IO.