Re: no gil?
Andrew Francis <andrewfr_ice-/[email protected]> Fri, 18 Apr 2014 16:33:57 -0700 (PDT)
| Newsgroups | gmane.comp.python.stackless |
|---|---|
| Message-ID | <[email protected]> |
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. Cheers, Andrew _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless