какие различия в коде который создает треды? кроме того что 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