その他の仮想マシンにおけるグリーンスレッド
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/25 22:51 UTC 版)
「グリーンスレッド」の記事における「その他の仮想マシンにおけるグリーンスレッド」の解説
仮想マシンを用いる言語処理系で、ネイティブスレッドではないグリーンスレッドと等価なスレッドを実装したものが存在する。例えば: Ruby (CRuby) 1.8 Racket Haskell Smalltalk (大半の Smalltalk の方言: Squeak Smalltalk, VisualWorks, GNU Smalltalk など) Stackless Python. 標準の C 実装の Python はシステムスレッドによる並列処理をサポートしているが、スレッド安全性を提供するために、グローバルインタプリタロックを用いている。このためスレッドの並行動作が妨げられる。 Stackless Python はプリエンプティブマルチタスクとマイクロスレッドによる協調マルチタスク(いわゆるtasklets)の両方をサポートしている。 The Erlang 仮想マシンは 'グリーンプロセス' と呼ばれるような機構を持っている。これはオペレーティングシステムのプロセスのようであるが(スレッドのように状態を共有しない)、Erlang Run Time System (erts) の範囲内で実装されている。(誤って)'グリーンスレッド'として参照されることがある。 GHC Haskell の場合、最初の割り当ての後、(変更可能な)一定の時間が経過するとコンテキストスイッチが発生する。GHC スレッドはひとつあるいは複数の OS のスレッド上で動作して、(GHC スレッドと OS スレッドが多:多の関係)SMP マシンでも利用できる各コアの上でコストのかかる OS スレッドを生成せずに並列処理を可能にしている。 Smalltalk の仮想マシンは評価の段階を考慮していない。しかし、VM は実行中のスレッドに対して外部のシグナル(タイマーの時間切れ、I/Oが利用可能になった、など)で割り込むことができる。たとえば QKS Smalltalk では、評価の段階を考慮し、グリーンスレッドをサポートし、さらに優先度逆転を防いでいる。大半の Smalltalk 環境では、定期的に起床する高い優先度のプロセスがタイムシェアリングのプリエンプションをうまく実現している。 [ [(Delay forMilliseconds: 50) wait] repeat] forkAt: Processor highIOPriority 多くのグリーンスレッドの実装では、優先度逆転を防ぐ仕組みを持っていない。
※この「その他の仮想マシンにおけるグリーンスレッド」の解説は、「グリーンスレッド」の解説の一部です。
「その他の仮想マシンにおけるグリーンスレッド」を含む「グリーンスレッド」の記事については、「グリーンスレッド」の概要を参照ください。
- その他の仮想マシンにおけるグリーンスレッドのページへのリンク