Greenlet сохраняет стек выполнения и позволяет переключаться из обычного синхронного кода; asyncio использует явные await-точки нативных корутин. Gevent делает I/O кооперативным через свои API или patching.
Как устроен под капотом механизм создания легковесных потоков (greenlet) в библиотеке Gevent в сравнении с нативными корутинами asyncio? Почему Gevent требует механизма monkey patching, а asyncio — нет?
Greenlet сохраняет стек выполнения и позволяет переключаться из обычного синхронного кода; asyncio использует явные await-точки нативных корутин. Gevent делает I/O кооперативным через свои API или patching.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Greenlet сохраняет стек выполнения и позволяет переключаться из обычного синхронного кода; asyncio использует явные await-точки нативных корутин. Gevent делает I/O кооперативным через свои API или patching.
Monkey patching подменяет блокирующие функции совместимыми gevent-вариантами, чтобы существующий синхронный код уступал управление. Это не безусловное требование: можно напрямую использовать gevent API. Asyncio ожидает изначально асинхронные библиотеки и потому обычно не подменяет стандартные модули. Неподдерживаемый блокирующий вызов способен остановить весь кооперативный loop в обоих подходах.
Источник: www.gevent.org.