Go では、関数は作成順 (FIFO) で実行され、Goroutine のスケジューリングはプロセッサ コアの数、優先順位、オペレーティング システムのポリシーの影響を受けます。実際のケースでは、Go が並列コンピューティングを実現するために、利用可能なプロセッサ コアに並行して Goroutines をスケジュールすることが示されています。
Go では、関数の実行と Goroutine のスケジューリング戦略がアプリケーションのパフォーマンスにとって重要です。この記事では、Go におけるスケジューリング戦略の基本原則を紹介し、スケジューリング動作を示す実践的なケースを示します。
Go プログラムは、同時に実行される一連の関数で構成されます。それぞれの関数はゴルーチンと呼ばれます。 Go は、Goroutine をさまざまなプロセッサ コアに自動的にスケジュールして、並列コンピューティングを実現します。
関数の実行は先入れ先出し (FIFO) 原則に従います。つまり、ゴルーチンは作成された順序で実行されます。ただし、1 つの Goroutine がブロックした場合 (たとえば、I/O 操作を待機している場合)、他の Goroutine は実行を継続できます。
Goroutine のスケジューリングは次の要素によって制御されます:
次は、関数のスケジューリングと Goroutine のスケジューリング動作を示す簡単な Go プログラムです:
package main import ( "fmt" "runtime" ) func worker(i int) { fmt.Printf("Worker %d running on processor %d\n", i, runtime.GOMAXPROCS(-1)) for { // 模拟工作 } } func main() { // 创建 4 个 Goroutine for i := 0; i < 4; i++ { go worker(i) } // 等待 Goroutine 完成 var input string fmt.Scanln(&input) }
出力:
Worker 0 running on processor 1 Worker 1 running on processor 1 Worker 2 running on processor 2 Worker 3 running on processor 2
この例では、4 つのゴルーチンが 2 つの使用可能なプロセッサ コアに対して並行してスケジュールされます。これは、Go が Goroutine を複数のプロセッサに自動的に分散して並列コンピューティングを実現することを示しています。
以上がgolang 関数と goroutine のスケジュール戦略の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。