ホームページ >バックエンド開発 >Golang >Go スケジューラは、ブロッキング操作が存在する場合に M と P の作成をどのように管理しますか?

Go スケジューラは、ブロッキング操作が存在する場合に M と P の作成をどのように管理しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 05:20:02577ブラウズ

How does the Go scheduler manage the creation of M and P in the presence of blocking operations?

Go スケジューラでの M と P の作成について

Go スケジューラは、ゴルーチン、OS スレッド (M)、およびコンテキストを含むモデルで動作します。 /プロセッサー (P)。パフォーマンスを最適化するために、スケジューラーは M と P の作成と使用を動的に管理します。

M の作成

M は、スケジューラーがブロックを実行する必要性を検出したときに作成されます。タスク。コード例では、ゴルーチンはブロッキング データベース操作を実行し、追加の M の作成をトリガーします。作成される M の正確な数は、ブロックされたゴルーチンの数と利用可能なシステム リソースによって異なります。

Creation of P

P は、新しいゴルーチンが起動されるときに作成されます。ただし、スケジューラはゴルーチンごとに新しい P を作成しません。代わりに、既存の P インスタンスを再利用し、GOMAXPROCS の値に等しい固定数の P を維持します。通常は、使用可能な CPU の数に設定されます。

サンプル コード内

テスト コードでは、2 つのバッチで 50 個の goroutine を作成します。データベース操作はブロックされているため、ブロックしているゴルーチンを処理するために必要に応じて M が作成されます。ただし、P インスタンスは再利用されるため、システム上の仮想コアの数を表す 8 P のみが作成されます。

その他のリソース

これについて詳しくは、トピックについては、次のリソースを参照してください:

  • [Go Goroutine、OS スレッド、および CPU 管理](https://www.programming-books.net/2019/07/question-go-scheduler- goroutine.html)
  • [Go GMP (Goroutine-M-P) モデルについて](https://blog.container-solutions.com/ Understanding-go-gmp-goroutine-m-p-model)

以上がGo スケジューラは、ブロッキング操作が存在する場合に M と P の作成をどのように管理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。