Skip to content

Instantly share code, notes, and snippets.

@jwhiteman
Created November 18, 2016 07:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jwhiteman/e2eefe6e529d611d0b9578d3b4375c4f to your computer and use it in GitHub Desktop.
Save jwhiteman/e2eefe6e529d611d0b9578d3b4375c4f to your computer and use it in GitHub Desktop.
Simple pipeline using Threads and Queues
require "thread"
stage_one = Queue.new
stage_two = Queue.new
stage_three = Queue.new
stage_one_worker = Thread.new do
100.times do |n|
stage_one << n
sleep 1
end
end
stage_two_worker = Thread.new do
while true
n = stage_one.pop
stage_two << n ** 2
end
end
stage_three_worker = Thread.new do
while true
n = stage_two.pop
stage_three << n + 10
end
end
final_stage = Thread.new do
while data = stage_three.pop
puts "final stage data received: #{data}"
end
end
[stage_one_worker, stage_two_worker, stage_three_worker, final_stage].each(&:join)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment