Thank you Jeff, On Tue, Nov 11, 2008 at 17:26, Jeff Senn <[EMAIL PROTECTED]> 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: http://www.stackless.com/wiki/Scheduling 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(...). cheers, Arnar _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless
