Ruby 1.8.7 と redis-rb gem を使用しています。Redis リストに 100 万件のレコードを書き込むために、さまざまな方法を試しました。
スレッドを使用しているときにパフォーマンスが低下していることに気付きました。その理由は何ですか?どうすればそれを防ぐことができますか? スレッド化された環境で本番用にRedisを使用するので、心配です。
ここに私の結果があります:
1_000_000.times do
$r.rpush "test_list", rand(1_000_000)
end
# Took: 74.2986769676208 sec.
threads = []
1_000.times do
threads << Thread.new {
1_000.times {
$r.rpush "test_list", rand(1_000_000)
}
}
end
threads.each { |k| k.join }
# Took: 391.705540895462 sec.
mutex = Mutex.new
threads = []
1_000.times do
threads << Thread.new {
1_000.times {
mutex.synchronize {
$r.rpush "test_list", rand(1_000_000)
}
}
}
end
threads.each { |k| k.join }
# Took: 308.474660873413 sec.
mutex = Mutex.new
threads = []
10.times do
threads << Thread.new {
100_000.times {
mutex.synchronize {
$r.rpush "test_list", rand(1_000_000)
}
}
}
end
threads.each { |k| k.join }
# Took: 109.103996992111 sec.
forks = []
8.times do
forks << fork {
125_000.times {
$r.rpush "test_list", rand(1_000_000)
}
}
end
forks.each { |k| Process.wait(k) }
# Took: 23.7934968471527 sec.