Quand un programme en python fonctionne, vous avez essentiellement deux morceaux de code s'exécutant sous le capot.
Tout d'abord, le Disponible interprète le code C en cours d'exécution et à l'aide de la norme C-pile pour sauver sa pile interne-cadres. Deuxièmement, le python interprété bytecode qui n'utilise pas le C de la pile, mais utilise plutôt le tas pour sauver sa pile d'images. Un greenlet est juste norme de code python et donc se comporte de la même manière.
Maintenant, dans un typique microthreaded application, vous finiriez par avoir des milliers, sinon des millions de microthreads (greenlets) de commutation de tous sur la place. Chaque commutateur est essentiellement équivalent à un appel de fonction avec un différé de retour (façon de parler), et donc utiliser un peu de la pile. Le problème est, le C-pile de l'interprète, tôt ou tard, frapper un débordement de pile. C'est exactement ce que le greenlet vulgarisation visant à, il est conçu pour déplacer des pièces de la pile avant en arrière pour le/dans le tas afin d'éviter ce problème.
Comme vous le savez, il y a trois événements fondamentaux avec greenlets, un spawn, un interrupteur et un retour, alors, regardons ceux qui à son tour:
A) Un Spawn
Le nouvellement généré greenlet est associée à sa propre adresse de base de la pile (où nous sommes actuellement). En dehors de cela, rien de spécial ne se passe. Le code python de la nouvellement généré greenlet utilise le tas dans des conditions normales et l'interprète continue à utiliser le C-pile comme d'habitude.
B) Un Interrupteur
Lorsqu'un greenlet est passé à partir d'une commutation greenlet, la partie pertinente de la C-pile (à partir de l'adresse de base de la switchng greenlet) est copié dans le tas. Le copié C-pile est libéré et la commutation de greenlet de l'interprète précédemment enregistré pile de données est copié dans le tas pour le nouvellement libérés C-pile. Le code python de la commutation de greenlet continue à utiliser le tas dans des conditions normales. Bien sûr, le code d'extension garde la trace de tout cela (qui tas la section à laquelle greenlet et ainsi de suite).
C) Un Retour
La pile est intact et le segment de la zone de retour de la greenlet est libéré par le python garbage collector.
En gros, cela est-il, beaucoup plus de détails et d'explications peuvent être trouvées à l' (http://www.stackless.com/pipermail/stackless-dev/2004-March/000022.html) ou tout simplement en lisant le code comme indiqué dans Alex réponse.