0
我看了看周圍的可用線程池的紅寶石,如connection_pool
它的工作原理是:紅寶石線程池
pool = ConnectionPool.new(size: 5, timeout: 20) do
@user
end
results = ['foo', 'bar', 'a', 'z'].map do |thing|
Thread.new do
pool.with do |user|
user.fetch(thing)
end
end
end.map(&:join).map(&:value)
這將有效地在任何給定運行5個併發讀取操作時間。
但是我的使用案例涉及一個API,每秒調用5個調用的速率限制,所以沒有時間窗口相關性的常規併發限制對我無能爲力。
我該如何做到這一點?
您使用連接池來加速操作。如果您需要刻意減慢速度,那麼您需要一個帶有內置速率限制器的順序隊列或具有退避間隔的重試機制。 – tadman