[Stackless] no gil?
andrewfr_ice at yahoo.com
Sat Apr 19 01:33:57 CEST 2014
Hi Kristjan and Folks:
>At PyCon I was approached by a core developer of CPython who asked me this:
>If we had a hypothetical GIL-less CPython, would stackless (tasklets or co-routines) still be a >useful constructs or would real threads be sufficient?
Yes tasklets would be useful constructs for two reasons. First a OS-thread uses more resources than a tasklet. Secondly and I think far more important reason, tasklets/channels are a simpler and more powerful concurrency construct.
I think Go is an example of what a multi-core Stackless would look like.
>3) Co-operative scheduling: To be able to run multiple execution contexts without pre-emptive >switching is a huge win. If your problem is such that you are IO bound anyway and cpu doesn"t >matter much then this can be a very attractive programming model.
Co-operative scheduling in the form of synchronous channels with buffers is a very simple and powerful concurrency model. John Reppy has a nice explanation of the attractiveness of synchronous channels in "Concurrent Programming in ML."
>Any other thoughts? How would applications of stackless python be different if there were no >GIL, i.e. threads could run in parallel (but tasklets were co-operatively scheduled in each thread >as before)?
I think it depends on how much one tries to abstract away in the runtime. Or what programming style one promotes.
>For one thing, I know that many synchronization privmitives currently written using channels >would need re->writing. They currently rely on tasklet.atomic for atomicitiy which also prevents >thread switching (by preventing the thread from releasing the GIL). If there were no GIL, we >would need to use additional locking if we wanted our stackless locking primitives (e.g. >stacklesslib.locks) to work between tasklets of different threads.
Again, if looking at Go's runtime source code is any indication, in a multi-core world, Stackless's channel implement will get much more complicated. Perhaps since channels become threadsafe, primitives that are built on top of them, don't have to worry.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Stackless