Golang はマルチスレッド モデルです。golang のスレッド モデルは MPG モデルです。一般的に、Go プロセスとカーネル スレッドは多対多に対応します。ねじ切りされた。
golang はマルチスレッド モードです。
gmp の p と m は p を m カーネル スレッドにバインドするため、p の最大数は GOPROCESS によって決定され、M カーネル スレッドの数は go によって 10K に制限されます。ただし、カーネルの理由により、それほど多くのことはできないため、この制限は存在しないものとして扱うことができます。明確にするために写真を撮ってください
Golang にはいわゆる M 比 N モデルがあります。N 個の go ルーチンは M スレッドの下に作成できます。一般に、N は M よりもはるかに大きいです。本質的にはマルチスレッド モデルですが、コルーチンのスケジュールは Go の runtime
によって決定され、開発者はコルーチン間の同期にチャネルを使用する必要があることを強調しています。
スレッドに関しては、言語レベルがオープンではないため、マルチコルーチンモデルとして理解することができ、1つのスレッド上に複数のgoルーチン
を作成することができます。同じコア数を持つスレッドの数は、実際にはランタイムによって決まります。
goroutine
のスケジューリングについては、実際には常に進化しています。ここでは GMP モデルについてのみ説明します。Goroutine は M スレッドで実行され、現在の P はタスクごとにチェックされます(プロセッサ) の実行可能キューには実行可能ゴルーチンが含まれています。現在の P に実行可能ゴルーチンがなくなると、別の P の実行可能キューにあるゴルーチンが盗まれます。
理論的には、ゴルーチンの作成はメモリによってのみ制限されます。一般的に、最大は 2KB です。2MB のスペースを持つスレッドの場合、理論的には、簡単に 1,000 に達します。もちろん、これは理想的な状況にすぎません。 , そのため、作成されるゴルーチンの数が増えても、OS のスレッド数は増加しません。スレッド スケジューリングは Go にとって比較的パフォーマンスを重視します。スケジュールの頻繁な切り替えはゴルーチン間でのみ発生し、スレッドは CPU の数と同じ数のアクティブ スレッドのみを維持します。
関連する学習に関する推奨事項: Go 言語チュートリアル
以上がgolang はマルチスレッド モードですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。