«前の日記(2009-12-23) 最新 次の日記(2009-12-25)» 編集

会長@腹部日記


2009-12-24 [長年日記]

_ JRuby Project Wiki Home Page / Design: Internals を訳して勉強する - (2) JRubyInternalDesign

前回の続きです。

More on threading:

・Ruby threads are mapped 1:1 to JRuby threads, except in thread pooling mode (experimental)
  where a pool of threads is maintained from which to fuel Ruby threads.
  The pooling was added to offset the overhead of APIs that spin up many threads, assuming they're green/lightweight.
・Java threads entering the system from outside the runtime are assigned a ThreadContext and RubyThread object.
  In our terminology, they are adopted by the runtime.
・Ruby's unsafe thread operations (criticalization of a single thread, Thread#kill, Thread#raise) are supported,
  but we make no deterministic guarantees about them.
  Criticalization does not guarantee that other threads have stopped before proceeding,
  and kill/raise require that the target thread eventually reach a checkpoint.
  Kill may wait forever if the target thread never reaches the die yourself checkpoint.
  • Rubyのスレッドは、JRubyのネイティブスレッドと 1:1 で対応します(ただし、試験的*1に実装されているスレッドプーリングモードの場合を除く)。
    • thread pooling modeの場合は、プールされたスレッドがRubyスレッドに提供されるようになります。
    • Thread pooing modeは、スレッドがグリーンスレッド/軽量スレッドである事を過程したプログラムが、大量にスレッドを起こした場合のオーバーヘッドを相殺するために追加されました。 *2
  • ランタイムの外からシステムを入れるJavaスレッドには、ThreadContextとRubyThreadオブジェクトを割り当てられます。 JRubyでは、それらはランタイムによって適合されます。*3
  • Ruby の安全でないスレッド操作 ( Thread#ciritical= や Thread#kill, Thread#raise など) もサポートされます。しかし、それらの操作に対して決定的な動作は保証しません。Kill操作は、targetスレッドがスレッド自身の消滅チェックに達しないかぎり、待ちぼうけになります。

感想・・・

技術書の翻訳技術が皆無に近いので、詳しい同期に聞きながらがんばろう。

*1 1.3からは普通に使ってよい?? http://kenai.com/projects/jruby/pages/PerformanceTuning#Thread_Pooling_Runtime_Properties

*2 ネイティブスレッドは並列性や切替は軽いいけど、作成時のコストは大きいことから

*3 Javaのスレッド + Ruby的情報の付加ってこと

_ きょうのつぶやき : 67回