Ruby 1.9ではOSスレッドが使用されていますが、実際には1つのスレッドしか同時に実行されません(別のスレッドが処理している間に1つのスレッドがIOをブロックしている可能性があります)。私が見たスレッドの例は、新しいスレッドを起動するのにThread.new
を使用するだけです。 Javaのバックグラウンドに由来して、私は通常、「ヘビー級」なので、多くの新しいスレッドを起動しないようにスレッドプールを使用します。Ruby 1.9スレッドプール
ルビにはスレッドプール構造が組み込まれていますか?私はデフォルトの言語ライブラリで1つも見ませんでした。または、通常使用される標準的な宝石はありますか? OSレベルのスレッディングはRubyの新しい機能なので、ライブラリがどの程度成熟しているのか分かりません。
ありがとうございました。私は実際にユースケースを実際には持っていませんが、私がピッカックスの本を読んでいたとき、これは私が確信していたものでしたが、あなたは明確にしました。 –
Rubyではスレッドが同時に実行されていないため、スレッドが役に立たないと言及している間は分かりません。それらは実際にはCPUのバウンドタスクには役に立たないが、パラレルでやりたいIOのブロッキングに非常に役立つことがある。例えば。同時HTTPリクエスト。 – Kamchatka
コメントありがとうございます。 Rubyではスレッドが無駄ではないことをさらに明確にする必要があります。スレッドはオーバーヘッドがないため、GILの制限を認識する必要があります。ノンブロッキングIOの場合、イベントCベースの非同期呼び出しがより適切かもしれません。詳細については、http://blog.gregweber.info/posts/2011-06-16-high-performance-rb-part3を参照してください。 – Wulfram