マルチスレッド

ActiveRecord::Base.connection_pool.with_connection

参考:

ActiveRecord をマルチスレッドで使う | EasyRamble

マルチスレッドとかマルチプロセスを実装してみた | 訳も知らないで

Parallel

require 'parallel'

Parallel.each((1..10).to_a, in_threads: 2) do |var|
  ActiveRecord::Base.connection_pool.with_connection do
    puts "#{var}番 #{User.find(var).id}"
  end
end

puts "finish!!"

参考:

grosser/parallel: Ruby: parallel processing made simple and fast – GitHub

並列処理で ActiveRecord の処理時間を短縮する | patorash のブログ

マルチスレッドとかマルチプロセスを実装してみた | 訳も知らないで

ruby で簡単並列処理 (Parallel) – Qiita

Ruby で並列処理を行う parallel gem の使い方と勘所 | ぺけみさお

Mutex

# なんか各スレッドが一つの変数に数字足していく
total = 0

locker = Mutex::new

Parallel.each((1..10).to_a, in_threads: 2) do |var|
  ActiveRecord::Base.connection_pool.with_connection do
    puts "#{var}番 #{User.find(var).id}"
    # このブロック内は必ず同時に一つのスレッドしか処理しない
    locker.synchronize do
      total += var
    end
  end
end

puts total
puts "finish!!"

参考:

マルチスレッドとかマルチプロセスを実装してみた | 訳も知らないで

Thread.new

参考:

Rails でアクションをバックグランドタスク的に thread にしてもオッケー? | QA@IT

Queue

参考:

Rails で並列処理をしてみた – Qiita

RequestLocals (request_store_rails)

参考:

ElMassimo/request_store_rails: Per-request global storage for Rails prepared for multi-threaded apps – GitHub

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です