7

私が理解しているように、Ruby 1.9 は OS スレッドを使用しますが、実際には 1 つのスレッドのみが実際に同時に実行されます (ただし、1 つのスレッドがブロック IO を実行しているときに、別のスレッドが処理を実行している可能性があります)。私が見たスレッド化の例はThread.new、新しいスレッドを立ち上げるために使用しているだけです。Java のバックグラウンドを持つ私は通常、スレッド プールを使用して、新しいスレッドが「重い」ため、多くの新しいスレッドを起動しないようにしています。

Rubyに組み込まれたスレッドプール構造はありますか? デフォルトの言語ライブラリにはありませんでした。または、通常使用される標準的な宝石はありますか? OS レベルのスレッド化は ruby​​ の新しい機能であるため、ライブラリがそれに対してどの程度成熟しているかはわかりません。

4

2 に答える 2

7

デフォルトのCRubyインタープリターは一度に1つのスレッドしか実行しないという点で正しいです(Pythonなどの他のCベースの動的言語にも同様の制限があります)。この制限のため、Rubyではスレッド化はそれほど一般的ではなく、その結果、デフォルトのスレッドプールライブラリはありません。並行して実行するタスクがある場合、プロセスは複数のサーバーに拡張できるため、通常、人々はプロセスを使用します。

スレッドを使用する必要がある場合は、JVMで実行されるRubyインタープリターであるJRubyプラットフォームでhttps://github.com/meh/ruby-threadpoolを使用することをお勧めします。それはあなたの路地のすぐ上にあるはずです、そしてそれは仮想マシン上で実行されているので、それは本当のスレッドを持っています。

于 2012-07-09T09:05:10.507 に答える