我一直在使用并发红宝石 1.1.5 与 Rails 5.1.6 和 MySQL 8.0。我必须进行 500 次数据库调用,所以我尝试使用并发 ruby 进行调用,但结果比预期的要慢得多
正常循环调用 - 这平均需要 7-8 秒
[1..500].map do
## Db Call
end
更改代码并使用并发 ruby 后,此时间增加到 12-13 秒
thread_pool = Concurrent::FixedThreadPool.new(10)
promises = []
[1..500].map do
Concurrent::Promises.future({ executor: thread_pool }) do
Rails.application.executor.wrap do
ActiveRecord::Base.connection_pool.with_connection do
## Db Call
end
end
end
end
无法调试导致并发请求变慢的可能原因。我错过了什么吗?