Gevent использует кооперативные stackful greenlets, которые могут переключаться глубоко внутри стека вызовов. Asyncio строится на явно асинхронных функциях и точках await.
Чем концептуально легковесные потоки в Gevent (greenlets) отличаются от нативных корутин asyncio?
Gevent использует кооперативные stackful greenlets, которые могут переключаться глубоко внутри стека вызовов. Asyncio строится на явно асинхронных функциях и точках await.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Gevent использует кооперативные stackful greenlets, которые могут переключаться глубоко внутри стека вызовов. Asyncio строится на явно асинхронных функциях и точках await.
В Gevent обычный на вид код может становиться кооперативным через совместимые библиотеки и monkey patching I/O. Это облегчает адаптацию некоторых синхронных программ, но делает точки переключения менее очевидными.
В asyncio асинхронность обычно видна в интерфейсе: awaitable-клиенты и async def. Блокирующий вызов в обоих подходах способен остановить обработку в соответствующем потоке. Ни greenlet, ни корутина сами по себе не обеспечивают CPU-параллелизм. Выбор зависит от экосистемы и существующего кода.