[Stackless] Algorithm for Stackless Scheduler

Arnar Birgisson arnarbi at gmail.com
Tue Nov 11 17:51:15 CET 2008

Thank you Jeff,

On Tue, Nov 11, 2008 at 17:26, Jeff Senn <senn at maya.com> wrote:
> Here... I'll contribute a try-to-be-brief summary (to the best of my
> recollection):
> There is a special: the "main" tasklet.
> There is a doubly-linked (circular) list of "runnable" tasklets.
> The head of the runnables is the "current" tasklet  (unless "main" is
> current...)
> Calling tasklet.insert() inserts (or re-inserts) at the END of the
> runnables.
> Calling tasklet.remove() removes from runnables.
> Calling stackless.schedule() rotates the head of runnables to the NEXT one
> after current
>  and switches to it.
> Calling chan.receive/send() can remove the current tasklet from runnables
>  if nothing is "waiting at the other end" (the NEXT tasklet in runnables
>  is continued).
>  OR (depending on the channel preference) continue in the caller
>  (inserting the sender/receiver at the "other end" onto runnables)
>  or rotate the head of runnables to the sender/receiver and pick up there.

If you have time, I think it would be very useful to describe this
(perhaps with pseudo-code) on the scheduler wiki page:

Channel preferences are particularly hard to understand by newcomers
given the current documentation. I think this might fix that problem.

Although, I found today that reading the code is helpful. I had no
idea that channels can act as iterators or channel.send_sequence(...).


More information about the Stackless mailing list