From: Leonard Cuff Date: 2008-02-14T04:28:33+09:00 Subject: Re: Actors and Concurrency I'm a newbie, so please set me straight. I've seen several people make the statement that 'Ruby does not have concurrency'. If this is so, what is the Threads class all about? And what is happening in this piece of code...Is this somehow the appearance of concurrency without being 'real' concurrency? What are the limitations here? Thanks! Leonard #!/usr/bin/env ruby # Fetch three urls simultaneously require 'net/http' pages = %w( www.rubycentral.com www.google.com www.pragprog.com ) threads = [] for page in pages threads << Thread.new(page) { |myPage| h = Net::HTTP.new(myPage, 80) puts "Fetching: #{myPage}" resp, data = h.get('/', nil ) puts "Got #{myPage}: #{resp.message}" } end threads.each { |aThread| aThread.join } Fetching: www.rubycentral.com Fetching: www.google.com Fetching: www.pragprog.com Got www.google.com: OK Got www.pragprog.com: OK Got www.rubycentral.com: OK On 2/11/08 4:00 PM, "Jason Roelofs" wrote: > (others can get more specific here, but here's the general idea) > > First of all, Ruby does not have concurrency. Not even 1.9 allows > concurrently running threads. The Ruby VM is a preemptive kernel. > Eventually Ruby's threads will be system threads *and* fully > concurrent, but that's a long time from now. > > Second, Actors aren't really threads or Fibers. There's a single > "dispatcher" thread/process/whatever that handles sending out events > to the pool of actors. So while Actors may look like threads and > concurrency, they aren't. > > So put the two together, and you're going to get sequential code execution. > > Jason > > On Feb 11, 2008 6:18 PM, fedzor wrote: >> So I was messing with actors today, and I found that I couldn't get >> an actor to run concurrently with the main thread. Am I just wishing >> fibers are something they're not? >> >> I had: >> >> Actor.spawn >> sleep 1 >> puts 5 >> end >> >> puts 6 >> >> and it went: >> 5 >> 6 >> >> So what do I have to do to get Actors to go concurrent on my ass? I >> was hoping for: >> 6 >> 5 >> >> Thanks, >> Ari >> --------------------------------------------| >> If you're not living on the edge, >> then you're just wasting space. >> >> >> >> >