Go ランタイム スケジューラの使用法は?
GoのスケジューラはGo言語におけるメカニズムで、並行実行されるgoroutineを調整する。スケジューラは使用可能なプロセッサ上でgoroutineの実行をスケジューリングし、実行状態を管理する。
スケジューラは暗黙的に使用され、開発者はスケジューラの動作を手動でコントロールする必要はありません。プログラムが立ち上がると、スケジューラは自動的に goroutine を利用可能なプロセッサに割り当てて実行します。スケジューラはgoroutineの負荷を均等化するために、「ワークスティーリング」というアルゴリズムを使用し、すべてがプロセッサが十分に負荷を受けるようにします。
Goプログラムの作成では、開発者はキーワード「go」だけでgoroutineを作成すれば、goroutineのスケジューリングや実行はスケジューラが自動的に行ってくれる。例:
func main() {
go func() {
// 在新的goroutine中执行的代码
}()
// 主goroutine的代码
}
上記コードでは、”go”キーワードによって新しいgoroutineが作成されています。スケジューラは自動的にこのgoroutineを実行可能なプロセッサに割り当てて実行し、メインgoroutineは自分のコードを実行し続けます。
スケジューラはまた、スケジューラの挙動を制御して影響を与えるために使用される関数やメソッドを提供しています。たとえば、runtime.Gosched() 関数を使用すると、現在の実行中の goroutine を明示的に降伏して、他の goroutine に実行させることができます。さらに、runtime.NumCPU() 関数を使用して、現在のシステムの CPU コア数を取得し、スケジューラをさらに有効活用できます。
つまり、Go言語のスケジューラは、キーワード「go」でgoroutineを作成することで使用し、スケジューラが並列実行の詳細を自動処理し、スケジューラの動作を制御・影響を与えるための関数とメソッドも提供します。