diff options
Diffstat (limited to 'lib/rainbows/queue_pool.rb')
-rw-r--r-- | lib/rainbows/queue_pool.rb | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/lib/rainbows/queue_pool.rb b/lib/rainbows/queue_pool.rb index 3ae899c..4a2ab8c 100644 --- a/lib/rainbows/queue_pool.rb +++ b/lib/rainbows/queue_pool.rb @@ -2,32 +2,29 @@ # :enddoc: require 'thread' -module Rainbows +# Thread pool class based on pulling off a single Ruby Queue. +# This is NOT used for the ThreadPool class, since that class does not +# need a userspace Queue. +class Rainbows::QueuePool < Struct.new(:queue, :threads) + G = Rainbows::G - # Thread pool class based on pulling off a single Ruby Queue. - # This is NOT used for the ThreadPool class, since that class does not - # need a userspace Queue. - class QueuePool < Struct.new(:queue, :threads) - G = Rainbows::G - - def initialize(size = 20, &block) - q = Queue.new - self.threads = (1..size).map do - Thread.new do - while job = q.shift - block.call(job) - end + def initialize(size = 20, &block) + q = Queue.new + self.threads = (1..size).map do + Thread.new do + while job = q.shift + block.call(job) end end - self.queue = q end + self.queue = q + end - def quit! - threads.each { |_| queue << nil } - threads.delete_if do |t| - G.tick - t.alive? ? t.join(0.01) : true - end until threads.empty? - end + def quit! + threads.each { |_| queue << nil } + threads.delete_if do |t| + G.tick + t.alive? ? t.join(0.01) : true + end until threads.empty? end end |