From: Francis Cianfrocca Date: 2007-08-23T07:51:34+09:00 Subject: Re: Fibers in Ruby 1.9? ------=_Part_34187_22866397.1187823086623 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On 8/22/07, David Flanagan wrote: > > My posts to ruby-core have arrived out-of-order today. By the time this > message appeared, it was already out of date. I have tested Fibers > directly and they do work on Linux. See > http://www.davidflanagan.com/blog/2007_08.html#000139 > > David > > David Flanagan wrote: > > 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 > > Thanks for the info guys. Obviously there's nothing stopping anyone from writing pure userland threads and scheduling them on top of kernel threads or LWPs. I'm not entirely convinced of the benefits of getting lightweight concurrency this way, but that's obviously not the question here. :-) ------=_Part_34187_22866397.1187823086623 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On 8/22/07, David Flanagan <david@davidflanagan.com> wrote:
My posts to ruby-core have arrived out-of-order today.  By the time this
message appeared, it was already out of date.  I have tested Fibers
directly and they do work on Linux.  See
http://www.davidflanagan.com/blog/2007_08.html#000139

        David

David Flanagan wrote:
> 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



Thanks for the info guys. Obviously there's nothing stopping anyone from writing pure userland threads and scheduling them on top of kernel threads or LWPs. I'm not entirely convinced of the benefits of getting lightweight concurrency this way, but that's obviously not the question here. :-)
------=_Part_34187_22866397.1187823086623--