Concurrency Coordination Reports
Queue Drain Coordination Report
Drain a prefilled queue with nonblocking pops and report whether work was left idle, fully drained, or the drain ran short.
Queue Drain Coordination Report
queue_drain_coordination_report.rb
requests =
queue = Queue.new
queue.push("job1")
queue.push("job2")
drained = 0
short = 0
requests.times do
begin
queue.pop(true)
drained += 1
rescue ThreadError
short += 1
end
end
remaining = queue.size
status = if remaining > 0
"idle"
elsif short > 0
"short"
else
"drained"
end
puts "requests=#{requests}"
puts "drained=#{drained}"
puts "remaining=#{remaining}"
puts "status=#{status}"
requests =
queue = Queue.new
queue.push("job1")
queue.push("job2")
drained = 0
short = 0
requests.times do
begin
queue.pop(true)
drained += 1
rescue ThreadError
short += 1
end
end
remaining = queue.size
status = if remaining > 0
"idle"
elsif short > 0
"short"
else
"drained"
end
puts "requests=#{requests}"
puts "drained=#{drained}"
puts "remaining=#{remaining}"
puts "status=#{status}"
requests =
queue = Queue.new
queue.push("job1")
queue.push("job2")
drained = 0
short = 0
requests.times do
begin
queue.pop(true)
drained += 1
rescue ThreadError
short += 1
end
end
remaining = queue.size
status = if remaining > 0
"idle"
elsif short > 0
"short"
else
"drained"
end
puts "requests=#{requests}"
puts "drained=#{drained}"
puts "remaining=#{remaining}"
puts "status=#{status}"
nonblocking pop
`Queue#pop(true)` removes a buffered item without waiting and raises `ThreadError` when the queue is empty, so counting successful pops against requested pops coordinates a consumer with the work that was actually queued.