2
まず私はRuby newbyです。私は言語を学ぼうとしています。私が何かを学ぶために知っている最善の方法は、実際に問題を解決することです。だから私は、単純な文字列の問題を取り、このようソリューション1を実装:Ruby 1.9.3のマルチスレッド実装は、単一の脅威の実装よりも時間がかかります。なぜですか?
def similarities(str)
result = str.length
(1..str.length - 1).each { |start|
str2 = str[start..-1]
index = 0
str2.split(//).each do |c|
break if c != str[index, 1]
index += 1
end
result += index
}
result
end
これはと思うの「並列foreachの」種類にぴったりであることを私に起こりました。だから私は私の驚き対処方法2に対処方法2
def similarities(str)
result = str.length
threads = []
(1..str.length - 1).each { |start|
str2 = str[start..-1]
threads << Thread.new { calculate(str, str2) }
}
threads.each { |t| t.join; result += t["index"] }
result
end
def calculate(str, str2)
index = 0
str2.split(//).each do |c|
break if c != str[index, 1]
index += 1
end
Thread.current["index"] = index
end
を思い付いたが、全く同じ入力でソリューション1よりも実行に約8倍以上の時間がかかりました。どうして ?
おかげで、