Ответ 1
Gevent дает вам возможность обрабатывать запросы блокировки. Это не дает вам возможность работать на многоядерных процессорах.
В любой момент в процессе python работает только одна зеленая (gevent coroutine). Реальная польза от gevent заключается в том, что он очень эффективен, когда он имеет дело с узкими местами ввода-вывода (что обычно имеет место для общих веб-приложений, веб-приложений, обслуживающих конечные точки API, веб-чат-приложений или бэкэнд и, в общем, сетевых приложений). Когда мы выполняем некоторые вычисления с процессором, от использования gevent не будет выигрыша от производительности. Когда приложение связано с I/O, gevent является чистой магией.
Существует одно простое правило: Greenlets отключается всякий раз, когда операция ввода-вывода блокируется или когда вы выполняете явно (например, с gevent.sleep())
Встроенные потоки python фактически ведут себя одинаково (псевдо) "одновременно" как gevent greenlets.
Ключевое различие заключается в том, что - зелья используют кооперативную многозадачность, где потоки используют превентивную многозадачность. Это означает, что зелень никогда не перестанет исполнять и "уступать" другой зелени, если только она не использует определенные "уступающие" функции (например, gevent.socket.socket.recv или gevent.sleep).
С другой стороны, потоки будут работать с другими потоками (иногда непредсказуемо) на основе того, когда операционная система решит их заменить.
И, наконец, для использования многоядерного ядра в Python - если это вам нужно - мы должны зависеть от модуля многопроцессорности (который является встроенным модулем в Python). Это "обходит GIL". Другие альтернативы включают использование Jython или выполнение задач параллельно (на разных ЦП) с использованием очереди задач, например. ZeroMQ.
Я написал очень длинное объяснение здесь - http://learn-gevent-socketio.readthedocs.org/en/latest/. Если вы хотите погрузиться в детали.:-D