require 'benchmark' require_relative 'cpu/fib' require_relative 'io/speller' # puts Benchmark.measure { # 50.times do # fib(30) # end # } # puts Benchmark.measure { # 10.times do # TEXT.each do |text| # spell text # end # end # } # [Thread] # @i = 0 # # def add n # result = @i + n # sleep rand(0.5..1) # @i = result # end # # debit = Thread.new do # add 10 # end # # credit = Thread.new do # add 20 # end # # debit.join # credit.join # puts @i # [Process] # [pid] # Process.pid # $$ # getpid # [fileno and standard streams] # Process.getrlimit(:NOFILE) # Process.getrlimit(:NPROC) # [Environment] # [Exit codes] # at_exit{} # exit! # abort # raise # [fork] # [CoW] # [wait] # [wait2] # fork {} # # sleep 1 # p Process.wait2 # [trap] # child_processes = 3 # dead_processes = 0 # # child_processes.times do # fork do # sleep 3 # end # end # # trap(:CHLD) do # puts Process.wait # dead_processes += 1 # exit if dead_processes == child_processes # end # # loop do # puts "[fib]: #{fib rand(10..20)}" # sleep 1 # end # [trap on dead] # child_processes = 3 # dead_processes = 0 # # child_processes.times do # fork do # sleep 3 # end # end # # $stdout.sync = true # # trap(:CHLD) do # begin # while pid = Process.wait(-1, Process::WNOHANG) # puts pid # dead_processes += 1 # exit if dead_processes == child_processes # end # rescue Errno::ECHILD # end # end # # loop do # puts "[fib]: #{fib rand(10..20)}" # sleep 1 # end # loop do # sleep 1 # puts "i'm alive!" # trap(:INT) do # puts "You can't kill me, ha-ha" # end # end # reader, writer = IO.pipe # fork do # reader.close # 10.times do # writer.puts 'Hello from a child process' # end # end # # writer.close # while message = reader.gets # $stdout.puts message # end