0
我想實現一個簡單的超時類來處理不同請求的超時。相同代碼的兩個版本沒有給出相同的結果
這是第一個版本:
class MyTimer
def handleTimeout mHash, k
while mHash[k] > 0 do
mHash[k] -=1
sleep 1
puts "#{k} : #{mHash[k]}"
end
end
end
MAX = 3
timeout = Hash.new
timeout[1] = 41
timeout[2] = 5
timeout[3] = 14
t1 = MyTimer.new
t2 = MyTimer.new
t3 = MyTimer.new
first = Thread.new do
t1.handleTimeout(timeout,1)
end
second = Thread.new do
t2.handleTimeout(timeout,2)
end
third = Thread.new do
t3.handleTimeout(timeout,3)
end
first.join
second.join
third.join
這似乎很好地工作。所有的超時工作都是彼此獨立的。 Screenshot attached
代碼的第二個版本但是會產生不同的結果:
class MyTimer
def handleTimeout mHash, k
while mHash[k] > 0 do
mHash[k] -=1
sleep 1
puts "#{k} : #{mHash[k]}"
end
end
end
MAX = 3
timeout = Hash.new
timers = Array.new(MAX+1)
threads = Array.new(MAX+1)
for i in 0..MAX do
timeout[i] = rand(40)
# To see timeout value
puts "#{i} : #{timeout[i]}"
end
sleep 1
for i in 0..MAX do
timers[i] = MyTimer.new
threads[i] = Thread.new do
timers[i].handleTimeout(timeout, i)
end
end
for i in 0..MAX do
threads[i].join
end
這究竟是爲什麼?
如何使用數組實現此功能?
是否有實現相同功能的更好的辦法?
我會用這樣的處理超時的請求到服務器。有沒有更好的方法來做到這一點? –
@ B.Nabi這些是什麼樣的要求? HTTP? –
是HTTP請求。 –