From: David Flanagan Date: 2007-08-23T04:15:10+09:00 Subject: Re: Fibers in Ruby 1.9? Francis, As I understand it, external iterators are implemented on top of fibers. And external iterators are working for me in Linux. So the fibers must be working. (I've posted external iterator examples at http://www.davidflanagan.com/blog/2007_08.html#000138 but I haven't figured out the Fiber API yet, so I haven't tested Fibers directly yet.) According to Wikipedia's entry on Fibers, they can be implemented in Posix with getcontext,setcontext,swapcontext from ucontext.h. I don't know anything about it. I haven't done that kind of low-level hacking since the days of setjmp/longjmp. I doesn't look to me, however, as if Ruby's implementation does that. Fibers are in cont.c, along with continuations. I haven't figured that code out yet, but I'm guessing that they're implemented on top of (or with the same techniques as) Continuations. David Francis Cianfrocca wrote: > On 8/22/07, *MenTaLguY* > wrote: > > On Wed, 22 Aug 2007 20:50:12 +0900, "Francis Cianfrocca" > > wrote: > > From day 1, MS recommended that Fibers not be used in any new code. > > In modern concurrency settings they are becoming increasingly > useful, however. > > Without them, or something like them (e.g. Rubinius Tasks), you must > play > some very ugly games to get lightweight concurrency -- see the use of > explicit continuation-passing (functions, not Continuations) in Scala's > actors library for an example of the best that can be hoped for in their > absence. > > Granted, Fibers will make things harder for JRuby. > > -mental > > > > Wouldn't Fibers make things harder for everything but Windows? Linux has > no equivalent construct whatsoever. (Of course in the later Linux > kernels, the Linux threads, which actually are LWPs, don't have nearly > as much scheduling overhead as they used to.) > >