救援工作的绩效改进

时间:2015-02-19 00:57:34

标签: ruby ruby-on-rails-4 resque

我正在构建一个resque作业,它将对一个大型阵列(超过70K元素)执行非常繁重的计算。

基本上,数组的每个元素都是执行繁重计算的函数的参数。该函数写在lib文件夹中的单独文件中。这个过程非常缓慢,目前一次只运行1个线程而不是4个或5个。

我试过这样的事情:

thread = []
new_array = original_array.each_slice(original_array.length/4).to_a #Split array in 4 parts so we can have a thread for each part
new_array.each do |a|
  thread << Thread.new {
    a.each do |element|
      establish_active_record_connection do |conn|
        perform_heavy_operation(element)
      end
    end
  }
end
thread.each {|t| t.join}
......

但它没有运行4个并发线程来加速进程。之后我尝试fork而不是线程。没有足够的改进。

任何人都在ruby中处理并发线程,对如何改进此类实现有任何建议吗?

提前致谢!

0 个答案:

没有答案