我正在开展一项研究项目,该项目要求我们在JSON端点发生响应时立即做出响应。 现在我正在产生许多线程,不断向该端点发出请求。我不确定这是否为我们提供了最佳性能。我也不确定如何确定我应该产生的线程数量(这样一旦发生变化我就会对变化作出反应 - 变化发生在不可预测的时间和速率上)。
我在ruby中这样做:
require 'oj'
require 'typhoeus'
threads = []
mutex = Mutex.new
(0..50).each do |i|
threads << Thread.new do
while true
begin
url = "http://target-endpoint.com/json";
response = Typhoeus.get(url, followlocation: true)
if response.code == 200
orders = Oj.load(response.response_body)
mutex.synchronize do
# analyze response, act accordingly
end
end
rescue StandardError => e
puts e.message
puts e.backtrace
end
end
end
end
threads.each(&:join)
此代码在AWS r3.xlarge实例(4个vCPU,30.5GB内存)上的ubuntu 16.04上运行。我也不确定这里的瓶颈是什么(CPU或内存)。 我们有权在我们正在与之交互的服务器上投入大量资金。该服务器也使用cloudflare。
感谢您的帮助!