Skip to content

Instantly share code, notes, and snippets.

@hoguej
Created June 6, 2013 19:54
Show Gist options
  • Save hoguej/5724406 to your computer and use it in GitHub Desktop.
Save hoguej/5724406 to your computer and use it in GitHub Desktop.
equire 'celluloid'
require 'date'
require 'pieces'
class Summer
include Celluloid
attr_reader :result, :status
def initialize
@status = :idle
end
def sum( stuff = [] )
@status = :running
@result = stuff.reduce(:+)
@status = :idle
end
end
THREADS=5
stuff = (1..100_000_000).to_a
puts "no threading"
start = Time.now
sum = stuff.reduce(:+)
duration = Time.now - start
puts "#{duration} #{sum}"
puts "threading"
summers = (0..THREADS-1).map { Summer.new }
begin
# start the summing
start = Time.now
stuff.pieces(THREADS).each_with_index do |sub_stuff, i|
summers[i].sum( sub_stuff )
end
sum = 0
summers.each_with_index do |summer, i|
sum += summers[i].future.result.value
end
duration = Time.now - start
puts "#{duration} #{sum}"
ensure
summers.each do |summer|
summer.terminate
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment