Как устроен под капотом механизм создания легковесных потоков (greenlet) в библиотеке Gevent в сравнении с нативными корутинами asyncio? Почему Gevent требует механизма monkey patching, а asyncio — нет?

Greenlet сохраняет стек выполнения и позволяет переключаться из обычного синхронного кода; asyncio использует явные await-точки нативных корутин. Gevent делает I/O кооперативным через свои API или patching.

Короткий ответ

Что ответить на собеседовании

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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее