グリーンスレッド
概要
カーネルが制御するスレッドではなく、それぞれのランタイムで制御するスレッド(ポイもの)
ランタイムでの実装の複雑さ
ユーザー空間で管理されている
一般にネイティブスレッドよりも軽量になる
マルチコアプロセッサのシステムで複数のプロセッサに割り当てるみたいなことはできない
これはネイティブスレッドでないと無理
OSスレッドの中で処理のタイムスライスをマネジメントするのがグリーンスレッドなのでまぁ当然だ
グリーンスレッド→ランタイムで独自に実装する必要がある
GoルーチンなどはGoのランタイムで実装されている
したがってグリーンスレッドはアプリケーションレベルのスレッド
アプリケーションレベルなのでCPUのコア別にスケジューリングするようなことはできない
M:Nスレッド
グリーンスレッドとカーネルスレッドを両方上手く取り入れている処理系
Scala
JVMでカーネルスレッドになりつつ、Futureみたいな並行処理のマネジメントしたり、cats effectのグリーンスレッド処理系があったりする JVMではカーネルスレッドを使っている
→JVM上でスレッドの制御を実装しているわけではない
JVMでのスレッドはカーネルによって制御されている
JVMはカーネルスレッドとマッピングしているだけである
ProjectLoom