Sure, 

I recommend you look at http://www.stackless.com/ (a fiber-supporting 
implementation of Python), and NeverBlock 
(http://www.espace.com.eg/neverblock/).  

Stackless Python I believe is used extensively on the EVE Online MMO runtime as 
fibers/coroutines make for very natural use of the actor pattern.  

I personally want fibers for the network applications.  We use long-lived 
connections for, e.g., Comet-style HTTP requests.  Right now we have to shunt 
those into a non-blocking, evented I/O server (twistd) since writing large 
applications using entirely non-blocking I/O just isn't tenable.  non-blocking 
code is far more complex and far less composable than synchronous code.  Fiber 
support makes it possible to use both blocking and non-blocking code in the 
same application.  


Logan Bowers

On Aug 11, 2010, at 10:35 AM, dan sinclair wrote:

> The em-synchrony project wraps a bunch of EventMachine code in fibers: 
> http://github.com/igrigorik/em-synchrony
> 
> I know the author was looking at MacRuby and trying to figure out if fibers 
> worked just the other day.
> 
> dan
> 
> 
> 
> On 2010-08-11, at 1:19 PM, Matt Massicotte wrote:
> 
>> Could you share some, or maybe provide a link?  I'm interested in the topic, 
>> but unfamiliar with any specific use-cases.
>> 
>> Matt
>> 
>> On Aug 11, 2010, at 10:15 AM, Logan Bowers wrote:
>> 
>>> +1 for fibers. There is a class of problems made much simpler and/or 
>>> possible with fibers that are not viable w/threads. 
>>> 
>>> Would love to see this make its way into MacRuby. 
>>> 
>>> Sent from my iPhone
>>> 
>>> On Aug 11, 2010, at 6:06 AM, Scott Thompson <ea...@mac.com> wrote:
>>> 
>>>> 
>>>> On Aug 11, 2010, at 7:23 AM, Louis-Philippe wrote:
>>>> 
>>>>> Hi Scott,
>>>>> 
>>>>> If you haven't done so already, you might want to have a look at:
>>>>> http://www.macruby.org/documentation/gcd.html
>>>>> 
>>>>> it speaks of MacRuby integrating Apple's latest multi-threading strategy: 
>>>>> Grand Central Dispatch.
>>>> 
>>>> Grand Central Dispatch is a fine technology, and goes a long way toward 
>>>> making concurrency much easier to implement.  But concurrent  execution is 
>>>> only one form of multitasking and GCD is not a general solution to all 
>>>> multitasking problems. In this particular case we are talking about 
>>>> cooperatively scheduled coroutines which is multitasking, but not 
>>>> necessarily concurrency.
>>>> 
>>>> In Grand Central Dispatch, work is broken up in to a number of small units 
>>>> and those units are dispatched to queues.  Eventually a preemptive thread 
>>>> will come along and pick up that work, run it (possibly in parallel with 
>>>> other bits of work). When a thread runs some of the work, however, it runs 
>>>> that work all the way through. 
>>>> 
>>>> Contrast that with a Fiber.  Like a block, a fiber represents a unit of 
>>>> work you need to do, but it's work you can turn your attention to... spend 
>>>> some time on, and then put down again at predefined spots.  Later, when 
>>>> you are ready, you can pick up that work and continue at the same spot.  
>>>> This is multitasking, but not concurrency.  Consider a simple example:
>>>> 
>>>> my_fiber = Fiber.new do
>>>>    number = 0
>>>>    loop do
>>>>            Fiber.yield number
>>>>            number = number + 1
>>>>    end
>>>> end
>>>> 
>>>>>> my_fiber.resume
>>>> => 0
>>>> 
>>>>>> my_fiber.resume
>>>> => 1
>>>> 
>>>> This is a coroutine. It has it's own execution context which is started 
>>>> with the first resume, runs up until the yield, and then suspends 
>>>> execution.  This is a simple example, but the coroutine could be calling 
>>>> other subroutines, or other complex tasks, with the yield suspending 
>>>> execution at any point along the way. At some point in the future, resume 
>>>> may be called again and execution continues where it left off up until the 
>>>> next time yield is called.
>>>> 
>>>> This type of multitasking would be hard to implement using GCD because GCD 
>>>> focuses on concurrency. Since each GCD block runs to completion, the 
>>>> solution would involve breaking up the Ruby code using the yield 
>>>> statements as boundaries and then dispatching those blocks to a queue. But 
>>>> that solution would quickly become untenable if you consider that the 
>>>> yield statements might come... say... in the middle of a case:while 
>>>> statement, or in the middle of a complex subroutine chain.
>>>> 
>>>> Another solution you might come up with is to submit the whole Fiber's 
>>>> block as a single GCD block and implement the yield as acquiring some 
>>>> multiprocessing lock (a semaphore or a condition lock for example).  If 
>>>> you do that, then you've got the added overhead of a concurrency lock for 
>>>> each yield and you've submitted a GCD block to a queue that contains an 
>>>> infinite loop.  That block is going to sit at the end of the queue, 
>>>> consuming one of the threads from the thread pool "forever".  If you get a 
>>>> bunch of these running at once... GCD is not going to be happy with your 
>>>> train cars sitting on his tracks.
>>>> 
>>>> Please don't get me wrong.  I __LOVE___ all the work that has gone into 
>>>> integrating GCD into MacRuby.  But I don't see how GCD is going to help 
>>>> someone implement the cooperative multitasking of Fibers, a Ruby 1.9 
>>>> language feature.
>>>> 
>>>> Scott
>>>> _______________________________________________
>>>> MacRuby-devel mailing list
>>>> MacRuby-devel@lists.macosforge.org
>>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>> _______________________________________________
>>> MacRuby-devel mailing list
>>> MacRuby-devel@lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>> 
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel@lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to