我正在玩 Thread,我发现我无法运行 10000 个线程。
它给了我以下错误:
threading.rb:23:in `initialize': can't create Thread (35) (ThreadError)
from threading.rb:23:in `new'
from threading.rb:23:in `block in <main>'
from threading.rb:22:in `times'
from threading.rb:22:in `<main>'
然后我尝试查看最大数量是多少,当我组成 2046 个线程时,Ruby 将运行代码。
为什么是 2046?它似乎遵循一种记忆模式,如 512、1024、2046...
threading.rb 代码:
threads = []
counter = 1000
ARGV.each do |a|
counter = a.to_i
end
lines = 0
counter.times do |i|
puts "This is index number #{i}."
end
puts "You've just seen the normal printing and serial programming.\n\n"
counter.times do |i|
Thread.new do
some_number = Random.rand(counter)
sleep 1
puts "I'm thread number #{i}. My random number is #{some_number}.\n"
lines += 1
end
end
messaged = false
while lines < counter
puts "\nWaiting to finish.\n" unless messaged
print '.'
puts "\n" if lines == counter
messaged = true
end
puts "\nI've printed #{lines} lines.\n"
puts "This is end of the program."