какие различия в коде который создает треды? кроме того что 1й код работает, так еще в консоли есть строки «in thread block», а после выполнения второго кода этих строк нету
где я туплю?
require 'thread'
class Pool
    def initialize(size)
        @size = size
        @jobs = Queue.new
        @pool = Array.new(@size) do |i|
            print "in array loop\n"
            Thread.new do
                print "in thread block\n"
                Thread.current[:id] = i
                catch(:exit) do
                    loop do
                        job, args = @jobs.pop
                        job.call(*args)
                    end
                end
            end
        end
    end
    def schedule(*args, &block)
        @jobs << [block, args]
    end
    def shutdown
        @size.times do
            schedule { throw :exit }
        end
        @pool.map(&:join)
    end
end
p = Pool.new(2)
20.times do |i|
    p.schedule do
        sleep rand(4) + 2
        puts "Job #{i} finished by thread #{Thread.current[:id]}"
    end
end
at_exit { p.shutdown }
#!/usr/bin/env ruby
require 'thread'
2.times do |i|
    print "in array loop\n"
    Thread.new do
        print "in thread block\n"
        #Thread.abort_on_exception = true
        #Thread.current['id'] = i
        #Thread.current['count'] = 0
        while true do
            print 'thread:'+i.to_s
        end
    end
end




