At PyCon2009, he followed up with another talk on more advanced
generator usage, which Guido commended on the python-ideas list:
A Curious Course on Coroutines and Concurrency
http://dabeaz.com/coroutines/
I have just started (this one will take more than one sitting ;-) but it
looks just as good.
tjr
I concur. I have just read the first pages, but it says
all good things I had to discover the hard way in years
past. Excellent reading for everybody wanting to understand
cooperative concurrency!
M. Simionato
> Excellent reading for everybody wanting to understand cooperative
> concurrency!
Hey, some of us were doing "cooperative concurrency" programming old MacOS
for years. It was generally considered a poor alternative to "true
multitasking".
It is a poor alternative compared to OS level processes and even
compared to preemptive threads in some cases. However, there are
situations
when you need thousands of lightweight threads of execution, and
in that case coroutines could be the only viable solution.
Just read David Beazley's presentation.
There is just one thing I find disappointing. Since the talk is almost
a compendium of advanced uses of generators I'm missing a reference to
Peter Thatchers implementation of monads:
http://www.valuedlessons.com/2008/01/monads-in-python-with-nice-syntax.html
Peters implementation can be simplified but it already contains all
relevant ideas.
oh that's neat. thanks for that. andrew
Great presentations. Thanks.
--
To email me, substitute nowhere->spamcop, invalid->net.
I can see from the first few slide I need to understand this. It
already seems clear that there are ways to improve our approach to
what we have done, though the overall approach is solid and works
well.
anyway thanks.
Yet another great thing about Python. The ability to run coroutines
in Matlab would make my working life a lot easier right now.
Carl Banks
> However, there are situations when you need thousands of lightweight
> threads of execution ;;;
The Linux kernel has been tested running hundreds of thousands of threads.
Did it pass or fail that test?
--
Steven
Those are still heavyweight threads requiring context switches to
switch from one to another. If you look at the multi-threading
benchmarks in the Alioth shootout, languages with lightweight threads
(such as Erlang or GHC) can switch orders of magnitude faster than
those that use kernel threads.