golang はシングルプロセスですか?

coldplay.xixi
リリース: 2020-07-22 09:25:29
オリジナル
4356 人が閲覧しました

Golang は単一プロセスではなく、マルチスレッドです。golang のスレッド モデルは MPG モデルです。一般的に、Go プロセスとカーネル スレッドは多対多に対応します。マルチスレッドである必要があります。

golang はシングルプロセスですか?

#golang は単一プロセスではなく、マルチスレッドです。

Golang にはいわゆる M 比 N モデルがあります。N 個の go ルーチンは M スレッドの下で作成できます。一般に、N は M よりもはるかに大きくなります。本質的にはマルチスレッド モデルですが、コルーチンのスケジューリングは Go の実行時の決定によって行われます。これは、開発者がコルーチン間の同期にチャネルを使用する必要があることを強調しています。

スレッドに関しては、言語レベルがオープンではないため、マルチコルーチンモデルとして理解することができ、1つのスレッド上に複数のgoルーチンを作成することができます。同じコア数を持つスレッドの数は、もちろん、実際には runtime によって決まります。

goroutine のスケジューリングについては、実際には常に進化しています。ここでは GMP モデルについてのみ説明します。Goroutine は M スレッドで実行され、現在の P はタスクごとにチェックされます(プロセッサ) の実行可能キューには実行可能ゴルーチンが含まれています。現在の P に実行可能ゴルーチンがなくなると、別の P の実行可能キューにあるゴルーチンが盗まれます。

理論的には、ゴルーチンの作成はメモリによってのみ制限されます。一般的に、最大は 2KB です。2MB のスペースを持つスレッドの場合、理論的には、簡単に 1,000 に達します。もちろん、これは理想的な状況にすぎません。 , そのため、作成されるゴルーチンの数が増えても、OS のスレッド数は増加しません。スレッド スケジューリングは Go にとって比較的パフォーマンスを重視します。スケジュールの頻繁な切り替えはゴルーチン間でのみ発生し、スレッドは CPU の数と同じ数のアクティブ スレッドのみを維持します。

関連する学習に関する推奨事項: Go 言語チュートリアル

以上がgolang はシングルプロセスですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート