Основная польза для зеленых потоков, как я понимаю, состоит в том, чтобы реализовать систему, в которой у вас есть большое количество объектов, которые выполняют операции с большой задержкой. Конкретным примером будет связь с другими машинами:
def Run():
# Do stuff
request_information() # This call might block
# Proceed doing more stuff
Потоки позволяют естественным образом писать приведенный выше код, но если количество объектов достаточно велико, потоки просто не могут работать адекватно. Но вы можете использовать зеленые нити даже в очень больших количествах. request_information()
выше может переключиться на некоторый планировщик, где другая работа ожидает и вернуться позже. Вы получаете все преимущества возможности вызывать «блокирующие» функции , как если бы они немедленно возвращали без использования потоков.
Это, очевидно, очень полезно для любого вида распределенных вычислений, если вы хотите написать код простым способом.
Для нескольких ядер также интересно уменьшить количество ожидающих блокировок:
def Run():
# Do some calculations
green_lock(the_foo)
# Do some more calculations
Функция green_lock
в основном пытается получить блокировку и просто переключиться на главный планировщик, если она выйдет из строя из-за других ядер, использующих объект.
Опять же, зеленые потоки используются для уменьшения блокировок, позволяя писать код естественным образом и при этом работать хорошо.