簡單的 Thread pool 控制器

單純最近有人有需要,所以寫簡單的 demo 上來

require 'thread'

POOL = 10
$thread_pool = []

def new_thread
  return Thread.new do
    sleep(rand(5))
    puts rand
  end
end

POOL.times do
  $thread_pool << new_thread()
end

loop do
  $thread_pool.each do |temp_thread|
    unless temp_thread.status
      $thread_pool[index] = new_thread()
    end
  end
  sleep 1
end

這邊做最簡單的解釋,所以不用類似 class / module 額外的包裝,簡單的來說用一個 array $thread_pool 來當 thread 的 handler,然後主程式不做任何事情,一直檢查該 poll 的 thread 是否已經完成工作,如果完成了,就繼續指派新的工作下去執行,大概就這樣而已,不過這邊要注意的是,工作項目的 queue 可以用

http://ruby-doc.org/stdlib-2.0.0/libdoc/thread/rdoc/Queue.html

或是 RDBMS / Redis 來完成,不過要注意量來選用不同的儲存體,而如果有全域變數要共用的話,請用

http://ruby-doc.org/core-2.2.0/Mutex.html

大概就這樣唄,以上

2個讚