Project

General

Profile

Bug #9433 ยป fork.rb

dlibanori (Daniel Libanori), 01/20/2014 02:41 PM

 
require 'open3'

N = 22_000_000
I = 1_000_000

def run(name, &block)
print "-- #{name}: "
str, array = "0", []

N.times do |i|
yield if i % I == 0
array << str.next!
end
rescue Errno::ENOMEM
puts "failed"
else
puts "ok"
end

strategies = {}

strategies[:nothing] =lambda do
end

strategies[:backtick] =lambda do
`free -m`
end

strategies[:system] =lambda do
system "free -m"
end

strategies[:open3] =lambda do
Open3.popen3 'free -m' do |stdin, stdout, stderr, wait_thread|
stdin.close_write # make sure it doesn't hang
status = wait_thread.value
stdout.read
end
end

strategy = ARGV[0].to_sym

if strategy == :all
strategies.keys.shuffle.each do |key|
run key, &strategies[key]
end
else
run strategy, &strategies[strategy]
end
    (1-1/1)