about summary refs log tree commit homepage
path: root/lib/rainbows/fiber_pool.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-10-22 02:51:18 +0000
committerEric Wong <normalperson@yhbt.net>2010-10-22 18:37:45 +0000
commit6d46978bdc8d2ee4263431ecdcada53389b12597 (patch)
tree29e1fb6ce60d84c3b3cf587e3faf4412b9a59a3c /lib/rainbows/fiber_pool.rb
parent03806d2b44c2d3cee75258ee9e83d671e751baeb (diff)
downloadrainbows-6d46978bdc8d2ee4263431ecdcada53389b12597.tar.gz
Reduces confusion for constant resolution/scoping rules
and lowers LoC.
Diffstat (limited to 'lib/rainbows/fiber_pool.rb')
-rw-r--r--lib/rainbows/fiber_pool.rb67
1 files changed, 31 insertions, 36 deletions
diff --git a/lib/rainbows/fiber_pool.rb b/lib/rainbows/fiber_pool.rb
index 18f43de..e178154 100644
--- a/lib/rainbows/fiber_pool.rb
+++ b/lib/rainbows/fiber_pool.rb
@@ -1,44 +1,39 @@
 # -*- encoding: binary -*-
 require 'rainbows/fiber'
 
-module Rainbows
+# A Fiber-based concurrency model for Ruby 1.9.  This uses a pool of
+# Fibers to handle client IO to run the application and the root Fiber
+# for scheduling and connection acceptance.  The pool size is equal to
+# the number of +worker_connections+.  Compared to the ThreadPool
+# model, Fibers are very cheap in terms of memory usage so you can
+# have more active connections.  This model supports a streaming
+# "rack.input" with lightweight concurrency.  Applications are
+# strongly advised to wrap all slow IO objects (sockets, pipes) using
+# the Rainbows::Fiber::IO class whenever possible.
+module Rainbows::FiberPool
+  include Rainbows::Fiber::Base
 
-  # A Fiber-based concurrency model for Ruby 1.9.  This uses a pool of
-  # Fibers to handle client IO to run the application and the root Fiber
-  # for scheduling and connection acceptance.  The pool size is equal to
-  # the number of +worker_connections+.  Compared to the ThreadPool
-  # model, Fibers are very cheap in terms of memory usage so you can
-  # have more active connections.  This model supports a streaming
-  # "rack.input" with lightweight concurrency.  Applications are
-  # strongly advised to wrap all slow IO objects (sockets, pipes) using
-  # the Rainbows::Fiber::IO class whenever possible.
+  def worker_loop(worker) # :nodoc:
+    init_worker_process(worker)
+    pool = []
+    worker_connections.times {
+      Fiber.new {
+        process(Fiber.yield) while pool << Fiber.current
+      }.resume # resume to hit ::Fiber.yield so it waits on a client
+    }
+    Rainbows::Fiber::Base.setup(self.class, app)
 
-  module FiberPool
-    include Fiber::Base
-
-    def worker_loop(worker) # :nodoc:
-      init_worker_process(worker)
-      pool = []
-      worker_connections.times {
-        ::Fiber.new {
-          process(::Fiber.yield) while pool << ::Fiber.current
-        }.resume # resume to hit ::Fiber.yield so it waits on a client
-      }
-      Fiber::Base.setup(self.class, app)
-
-      begin
-        schedule do |l|
-          fib = pool.shift or break # let another worker process take it
-          if io = l.kgio_tryaccept
-            fib.resume(io)
-          else
-            pool << fib
-          end
+    begin
+      schedule do |l|
+        fib = pool.shift or break # let another worker process take it
+        if io = l.kgio_tryaccept
+          fib.resume(io)
+        else
+          pool << fib
         end
-      rescue => e
-        Error.listen_loop(e)
-      end while G.alive || G.cur > 0
-    end
-
+      end
+    rescue => e
+      Rainbows::Error.listen_loop(e)
+    end while G.alive || G.cur > 0
   end
 end