2009-07-29 12 views
5

したがって、Ruby 1.9.1は現在declared stableになりました。 Railsはそれを扱うことになっており、ゆっくりと宝石がそこに移植されています。Ruby 1.9.1のネイティブスレッド、それは私のために何ですか?

ネイティブスレッドとグローバルインタープリタロック(GIL)があります。

GILが用意されているので、ネイティブスレッドは1.9.1のグリーンスレッドよりも何らかの利点がありますか?

答えて

4

私は大きな勝利だと思います、そのCベースの拡張子can release the GILです。したがって、たとえば、MySQLアダプタは、他のすべてのRubyスレッドをブロックすることなく、長時間実行されているデータベースクエリをきれいに実行できます。

7

1.9のスレッドはネイティブですが、一度に1つのスレッドしか実行できないようにするために「速度が遅く」なっています。これは、スレッドが実際に並行して実行された場合、既存のコードを混乱させるためです。

長所:

  • IO今のスレッドで非同期です。スレッドがIO上でブロックすると、IOが終了するまで別のスレッドが続行されます。
  • 拡張機能は本当のスレッドを使用できます。

短所:

  • スレッドセーフではありません任意のC拡張がスレッドを使用する際に見つけにくい問題を持つことができます。スレッドがスレッドで使用されないように、スレッドを安全でないものとしてマークする方法はありません。
  • クラス名は同じです。ネイティブのスレッド化クラスは、別の名前が付けられている必要があります。
  • そして最悪の場合、スレッド化はさまざまなプラットフォームで動作します!たとえば、priority()はSolaris、Windows、およびLinuxで異なります。 loop {}のようなものはLinuxで正常に動作し、他のスレッドは実行可能です。しかし、Solarisスレッドではそのスレッドがプロセスの時間を奪い、あなたは決して終了しません!
関連する問題