Hello again! <br><br>Bummer about the docs, though I&#39;ve tracked down and bookmarked the two articles mentioned by Andrew.<br><br>Also, those three paragraphs on soft switching were very enlightening, thank you Richard :) <br>
<br>I&#39;ll keep plugging away at it, and I&#39;m sure I&#39;ll be back at some point in the future to ask more specific questions!<br><br>&#39;till next time, cheers!<br><br>H<br><br><div class="gmail_quote">On Fri, Jun 19, 2009 at 2:58 PM, Richard Tew <span dir="ltr">&lt;<a href="mailto:richard.m.tew@gmail.com">richard.m.tew@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">On Fri, Jun 19, 2009 at 9:27 PM, Horace Blegg&lt;<a href="mailto:tkjthingone@gmail.com">tkjthingone@gmail.com</a>&gt; wrote:<br>

&gt; Anyway! I&#39;m currently slogging through the source code for stackless as time<br>
&gt; allows (work + school = no free time), and finding it rather interesting. I<br>
<br>
</div>Sounds like a good start :-)<br>
<div class="im"><br>
&gt; was wondering if there was another resource other the comments in the code<br>
&gt; and my own knowledge (not excellent) of C that would help me follow<br>
&gt; stackless&#39;s source? (other than lots of time + sheer brainpower, which is my<br>
&gt; current approach)<br>
<br>
</div>I am not sure there is any current and directly relevant documentation.<br>
<div class="im"><br>
&gt; I mainly interested in what happens behind the scenes when someone makes a<br>
&gt; tasklet (or tasklets), what happens while it&#39;s running, and how the<br>
&gt; interpreter/(scheduler?) keeps track of/handles tasklets (if at all?), etc,<br>
&gt; for an academic/pet project. Expanding my horizons, for lack of a better<br>
&gt; reason.<br>
<br>
</div>[...hard switching...]<br>
<br>
There is also soft switching, where lower on the call stack a<br>
dispatcher function waits for an &quot;unwind token&quot; to be returned that<br>
holds a reference to a Python execution frame.  I&#39;m not going to go<br>
into a lot of detail about how it works, as I don&#39;t have much more<br>
time to work on this email.  Soft switching is supposed to be a lot<br>
faster than hard switching.  The code behind the Stackless fork<br>
includes minimal changes to the Python interpreter itself, but almost<br>
all of those minimal changes are to support soft switching.<br>
<br>
The stackless module has a chain of tasklets _per Python thread_.<br>
This is the circular list of tasklets, where one within it is the<br>
tasklet currently being executed (the &quot;current&quot; tasklet).  The thread<br>
of execution running when the interpreter started up is a special<br>
tasklet called the &quot;main&quot; tasklet.  You can run a scheduler on each<br>
thread.  Channels have special code to allow communication between<br>
tasklets running on different schedulers in different threads.<br>
<br>
Between channels, tasklets, blocking (using soft and hard switching)<br>
and the scheduler, this is the core part of the Stackless source code.<br>
 There is of course also the pickling of running code, but that can be<br>
ignored for the purposes of understanding Stackless for the most part.<br>
<br>
Cheers,<br>
<font color="#888888">Richard.<br>
</font></blockquote></div><br>