1年くらい前にRubyの勉強のためにThreadクラスのメソッドや基礎をまとめたもの
参考
・https://docs.ruby-lang.org/ja/latest/class/Thread.html
・https://docs.ruby-lang.org/ja/latest/class/Thread=3a=3aMutex.html
・https://docs.ruby-lang.org/ja/latest/class/Fiber.html
スレッド基礎
・スレッド
スレッドとはメモリ空間を共有して同時に実行される制御の流れのこと。
・スレッドの変数の扱い
同じプロセス上の他のスレッドとメモリを共有する。
そのため他のスレッドと共有したくない値は、ブロックの仮引数として受け取る。ブロックローカル変数にすると他のスレッドと共有されなくなる。
スレッドの状態
・run :実行or実行可能状態
・sleep :停止状態
・aborting :終了処理中
・dead :終了状態
スレッドの生成
Thread#fork
スレッドの生成してブロックの評価を開始する。
Thread#join
スレッドが終了するまで待つ
Thread#value
スレッドが終了するまで待ち、戻り値を得る
スレッドの操作
Thread#wakeup
停止スレッドを実行可能状態にする
Thread#run
即座に処理をそのスレッドに切り替える
Thread#kill
生きている状態のスレッドの終了
Thread#pass
現在のスレッドから他のスレッドに実行を移す
Thread### スレッドの優先順位
優先順位の値が大きいほどスレッドの優先度が高くなる
Thread#priority
スレッドの優先度を確認する
ThreadGroup
すべてのスレッドはどこかのスレッドグループに属しており、デフォルトはThreadGroup::Defaultに属している。
ThreadGroup#group
自身の所属グループを得る
ThreadGroup#add
グループにスレッドを追加する
ThreadGroup#list
グループのスレッド一覧
Mutex
共有データを並行アクセスから保護するためにある。排他制御を行う。
Mutex#lock、Mutex#unlock、Mutex#locked?などのメソッドがある。
Mutex#try_lock
ロックをしようとしてロックが成功したらtrueを返す。失敗ならfalse。
Fiber
ノンプリエンプティブな軽量スレッドを提供する。Threadと違い処理の流れを扱うことができる。例えば、処理を途中まで実行して、その後任意のタイミングで再開させることが出来る。
Process
プロセスを管理するモジュール。デーモンプロセスを生成、操作できる。
スレッドと違いメモリを共有しない。