La utilidad básica para los hilos verdes, como yo lo veo, es implementar un sistema en el que tenga una gran cantidad de objetos que realicen operaciones de alta latencia. Un ejemplo concreto se comunica con otras máquinas:
def Run():
# Do stuff
request_information() # This call might block
# Proceed doing more stuff
Hilos permiten escribir el código anterior, naturalmente, pero si el número de objetos es lo suficientemente grande, las discusiones no pueden realizar adecuadamente. Pero puede usar hilos verdes incluso en grandes cantidades. El request_information()
anterior podría cambiar a algún programador donde otro trabajo está esperando y regresar más tarde. Obtiene todos los beneficios de poder llamar a las funciones de "bloqueo" como si regresaran inmediatamente al sin usar hilos.
Esto es obviamente muy útil para cualquier tipo de computación distribuida si desea escribir código de una manera directa.
También es interesante para múltiples núcleos para mitigar la espera de bloqueos:
def Run():
# Do some calculations
green_lock(the_foo)
# Do some more calculations
La función green_lock
sería básicamente intentar adquirir el bloqueo y simplemente cambiar a un planificador principal si falla debido a otros núcleos utilizando el objeto.
Una vez más, los hilos verdes se utilizan para mitigar el bloqueo, lo que permite que el código se escriba de forma natural y todavía funcione bien.
Esto suena como un candidato wiki de la comunidad. –
@Tim - make wiki – zaharpopov
Me gustaría señalar que CPython regular también tiene soporte para hilos verdes a través de un pequeño módulo de extensión llamado greenlet (http://pypi.python.org/pypi/greenlet). Stackless todavía puede hacer algunas cosas que CPython no puede, pero los hilos verdes básicos no son uno de ellos. – porgarmingduod