ホームページ  >  記事  >  バックエンド開発  >  golang はマルチスレッド モードですか?

golang はマルチスレッド モードですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-22 09:31:365707ブラウズ

Golang はマルチスレッド モデルです。golang のスレッド モデルは MPG モデルです。一般的に、Go プロセスとカーネル スレッドは多対多に対応します。ねじ切りされた。

golang はマルチスレッド モードですか?

golang はマルチスレッド モードです。

gmp の p と m は p を m カーネル スレッドにバインドするため、p の最大数は GOPROCESS によって決定され、M カーネル スレッドの数は go によって 10K に制限されます。ただし、カーネルの理由により、それほど多くのことはできないため、この制限は存在しないものとして扱うことができます。明確にするために写真を撮ってください

golang はマルチスレッド モードですか?

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 サイトの他の関連記事を参照してください。

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