class RBThreadPool::RBThreadDaemon
Attributes
condition[RW]
daemon_th[R]
Public Class Methods
new(mutex, common_pool, elastic, manager, config = {})
click to toggle source
# File lib/core/rb_daemon.rb, line 10 def initialize(mutex, common_pool, elastic, manager, config = {}) @mutex = mutex @config = config @interval = config[:interval] || 20 @pool = common_pool @elastic = elastic @manager = manager @condition = true @daemon_th = nil end
Public Instance Methods
run!()
click to toggle source
# File lib/core/rb_daemon.rb, line 21 def run! @daemon_th = generate_daemon end
Private Instance Methods
clean(pool)
click to toggle source
# File lib/core/rb_daemon.rb, line 50 def clean(pool) size = pool.size count_dead = 0 size.times do |idx| unless pool[idx].alive? pool[idx] = nil count_dead += 1 end end return count_dead if count_dead == 0 pool.compact! count_dead end
clean_common(pool)
click to toggle source
# File lib/core/rb_daemon.rb, line 45 def clean_common(pool) deads = clean(pool) revive_common_thread deads if deads > 0 end
generate_daemon()
click to toggle source
# File lib/core/rb_daemon.rb, line 27 def generate_daemon return Thread.new do Thread.current.name = 'RbThr:Daemon' if Thread.respond_to?(:name=) Thread.abort_on_exception = true interval = @interval mutex = @mutex pool = @pool elastic = @elastic while @condition sleep(interval) mutex.synchronize { clean_common pool } Thread.pass mutex.synchronize { clean elastic } unless elastic.nil? || elastic.empty? end end end
revive_common_thread(num)
click to toggle source
# File lib/core/rb_daemon.rb, line 64 def revive_common_thread(num) manager = @manager pool = @pool num.times do |idx| pool << manager.fork end end