グリーンスレッド
#スレッド
概要
カーネルが制御するスレッドではなく、それぞれのランタイムで制御するスレッド(ポイもの)
ランタイムでの実装の複雑さ
ユーザー空間で管理されている
一般にネイティブスレッドよりも軽量になる
マルチコアプロセッサのシステムで複数のプロセッサに割り当てるみたいなことはできない
これはネイティブスレッドでないと無理
プロセス参照
OSスレッドの中で処理のタイムスライスをマネジメントするのがグリーンスレッドなのでまぁ当然だ
グリーンスレッド→ランタイムで独自に実装する必要がある
GoルーチンなどはGoのランタイムで実装されている
したがってグリーンスレッドはアプリケーションレベルのスレッド
アプリケーションレベルなのでCPUのコア別にスケジューリングするようなことはできない
M:Nスレッド
グリーンスレッドとカーネルスレッドを両方上手く取り入れている処理系
Scala
JVMでカーネルスレッドになりつつ、Futureみたいな並行処理のマネジメントしたり、cats effectのグリーンスレッド処理系があったりする
JVMではカーネルスレッドを使っている
→JVM上でスレッドの制御を実装しているわけではない
JVMでのスレッドはカーネルによって制御されている
JVMはカーネルスレッドとマッピングしているだけである
→OSの操作なので汎用性がある反面コンテキストスイッチやメモリフットプリントなど効率が悪い
なぜ Go では何百万もの Goroutine を作れるのに Java は数千のスレッドしか作れないのか?
ProjectLoom
https://ichi.pro/project-loom-de-wa-riakuthibumoderu-to-koru-chin-40664741293618
https://zenn.dev/110416/articles/31dc2cdccf8596