Ответ 1
Вы можете думать о зеленых, более похожих на кооперативные потоки. Это означает, что нет планировщика, предварительно упреждающего переключение между вашими нитями в любой момент - вместо этого ваши зеленые поля добровольно/явно отказываются контролировать друг друга в определенных точках вашего кода.
Влияет ли на них GIL? Может ли быть более одной очереди в то время?
За один раз запускается только один путь кода - преимущество в том, что у вас есть конечный контроль над тем, что есть.
Каковы подводные камни использования зеленых или талией?
Вам нужно быть более осторожным - плохо написанная зелень не даст контроля над другими зелени. С другой стороны, поскольку вы знаете, когда зеленая коммутатор контекста, вы можете уйти, не создавая блокировки для общих структур данных.
Если я использую зелья, сколько из них может обрабатывать процесс? (Мне интересно, потому что в одном процессе вы можете открывать потоки до предела umask, установленного в вашей системе * ix.)
С регулярными потоками, чем больше у вас будет больше накладных расходов планировщика. Также регулярные потоки по-прежнему имеют относительно высокие накладные расходы контекста. У зеленых нет этих накладных расходов, связанных с ними. Из документации :
Большинство серверов ограничивают размер своих рабочих пулов относительно низким количество параллельных потоков из-за высоких накладных расходов, связанных с переключение между ними и создание новых потоков. Хотя потоки дешевы по сравнению с процессами (forks), они по-прежнему дороги для создания каждое новое соединение.
Модуль gevent добавляет зелья в микс. Гринлеты ведут себя аналогично к традиционным потокам, но очень дешево создавать. Основанный на gevent сервер может порождать тысячи зеленых (по одному для каждого соединения) с почти нет накладных расходов. Блокировка отдельных зеленых зон не влияет на серверы могут принимать новые запросы. Количество одновременных соединения практически не ограничены.
Здесь также можно прочитать здесь, если вам интересно: http://sdiehl.github.io/gevent-tutorial/