我正在尝试计算["a".."z", "A".."Z", 0..9]
和长度@perm
的所有排列。因此,通过使用.lazy
我在我的机器中减少了8GB内存7.5的内存使用量,但我仍然有一些问题/问题:
@perm = 4
@chars = [*"a".."z", *"A".."Z", *0..9]
@total_perm = @chars.size**@perm
@ips = 10000
@total_indexes = 0
@thr = []
puts "@total_perm: #{@total_perm}"
@chars.repeated_permutation(@perm).lazy.map(&:join).each_slice(@ips).with_index do |item, index|
puts "=========> out_index: #{index}"
@thr << Thread.new do
begin
item.each_with_index do |vitem, vindex|
@total_indexes += 1
end
rescue ThreadError
end
end
end
@thr.each {|t| t.join }
puts "=========> total_indexes: #{@total_indexes}"
答案 0 :(得分:1)
您可以阅读这篇文章Ruby concurrency and parallelism。
总之,CRuby 1.9&gt; =线程不是'本机'(不是绿色),但由于GIL它们不能并行。 Rubinious和JRuby没有GIL,所以它是一个选项。其他选项是自己实现线程池或使用像EventMachine和Celluloid这样的宝石。