В чем разница между корутинами и потоками в Python
Python
Senior
Без компании
В чем разница между корутинами и потоками в Python
Ответы
Корутины и потоки в Python решают задачи конкурентности, но работают по-разному:
**Потоки (threading)**
- Используют системные потоки ОС (GIL ограничивает параллелизм в CPython)
- Переключение между потоками управляется ОС (preemptive multitasking)
- Подходят для I/O-bound задач
```
import threading
def task():
print("Thread running")
thread = threading.Thread(target=task)
thread.start()
```
**Корутины (asyncio)**
- Работают в одном потоке (cooperative multitasking)
- Переключение явное через `await`
- Эффективны для I/O-bound задач с большим количеством соединений
```
import asyncio
async def task():
print("Coroutine running")
await task() # в async функции
```
**Ключевые отличия:**
- Потоки могут выполняться параллельно (если GIL отпущен), корутины - только последовательно
- Корутины потребляют меньше ресурсов (нет накладных расходов на переключение потоков)
- Корутины требуют явного указания точек переключения (`await`)