グリーンスレッド(英: green threads)とは、コンピュータプログラミングにおいて、オペレーティングシステムではなく仮想マシン (VM) によってスケジュールされるスレッドである。グリーンスレッドはネイティブのOSの機能に依存せずにマルチスレッド環境をエミュレートする。グリーンスレッドはカーネル空間ではなくユーザー空間で管理されるため、ネイティブスレッドがサポートされていない環境でも動作する。マルチコアプロセッサのシステムでは、ネイティブスレッドの実装は処理を複数のプロセッサに割り当てることができる。これはグリーンスレッドの実装では不可能である。このような環境ではネイティブスレッドに明らかな利点がある。しかし、ユニプロセッサのシステムでは、最も効率のよいモデルが何なのか、いまだ明確な答えはない。では下記の点が明らかになった。また、グリーンスレッドはブロックする I/O 処理を実行する場合に、他のすべてのスレッドをブロックする可能性がある。この問題を避けるため、グリーンスレッドは非同期 I/O処理を行わなければならず、それにより複雑さが増加し、遅延が大きくなるとともに、開発期間や難易度が増加する。ユーザー空間に構築されているため、グリーンスレッドはネイティブスレッドより軽量であるが、協調的マルチタスクの形で実装されており、スレッド化されたプログラムはシステムを停止させてしまう恐れがある。Java 1.1では、グリーンスレッドが JVM の使用可能な唯一のスレッドモデルであった。グリーンスレッドはネイティブスレッドに対していくつか制限があるため、以降の Java のバージョンではネイティブスレッドを優先しグリーンスレッドをサポートしなくなった。例外として低消費電力デバイス向けのオペレーティングシステムと Java 仮想マシンの中間と考えられるがある。Squawk VM はネイティブコードを最小限の部分のみに用い、これらの最小部分を移行するためにグリーンスレッドを用いている。仮想マシンを用いる言語処理系で、ネイティブスレッドではないグリーンスレッドと等価なスレッドを実装したものが存在する。例えば:The Erlang 仮想マシンは 'グリーンプロセス' と呼ばれるような機構を持っている。これはオペレーティングシステムのプロセスのようであるが(スレッドのように状態を共有しない)、Erlang Run Time System (erts) の範囲内で実装されている。(誤って)'グリーンスレッド'として参照されることがある。GHC Haskell の場合、最初の割り当ての後、(変更可能な)一定の時間が経過するとコンテキストスイッチが発生する。GHC スレッドはひとつあるいは複数の OS のスレッド上で動作して、(GHC スレッドと OS スレッドが多:多の関係)SMP マシンでも利用できる各コアの上でコストのかかる OS スレッドを生成せずに並列処理を可能にしている。Smalltalk の仮想マシンは評価の段階を考慮していない。しかし、VM は実行中のスレッドに対して外部のシグナル(タイマーの時間切れ、I/Oが利用可能になった、など)で割り込むことができる。たとえば QKS Smalltalk では、評価の段階を考慮し、グリーンスレッドをサポートし、さらに優先度逆転を防いでいる。大半の Smalltalk 環境では、定期的に起床する高い優先度のプロセスがタイムシェアリングのプリエンプションをうまく実現している。多くのグリーンスレッドの実装では、優先度逆転を防ぐ仕組みを持っていない。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。