「RubyのNet:HTTPの実装では、何が良くないのか?」と聞くものもいるかもしれない。Adam Nelson氏は、大量のデータを転送するアプリケーションで見たものに驚いた。「実際に起こっていることは、CPUの最大回転数であり、1024バイト のチャンクでデータは転送される」(リンク)。Adam氏は初回の分析(リンク)でそれを発見した。実際の問題は「すべての単一rbuf_fill呼び出しについてタイムアウ トを配置する」ことであると、 Alex Young氏は述べている。「そこでデフォルトで、受信する1000バイトのデータごとに新たなスレッドを作成する必要がある」。
Rubyとライブラリのさまざまな実装を比較すると(リンク)、Ruby 1.8.6は「 もっとも近い競争相手(Ruby 1.8.7)より2倍もの多くのCPU」を使用することが分かり、Ruby 1.8.7はより大きなバッファー(16K)を使用する。興味深いことに、Ruby 1.9.0は最小のCPU使用率であり、readpartial(リンク)を使用する実装つきで、「ソケットの読み出しのタイムアウトがなく」、「それぞれの読み出 しには事前に割り当てられたストリングがある」。Zed Shaw氏によるMongrelコアに基づいた純粋なRuby実装であるRFuzz(リンク)が、すぐ後ろにある。
この問題は新しくはない。2006年のRuby会議のメーリングリストのスレッド(リンク)でその問題や次善策について議論している。
また、これはオープンソースの実装がいかに便利で、価値があるかを示す好個の模範である。
原文はこちらです:http://www.infoq.com/news/2008/11/ruby-http-problems