Golang はマルチプロセスであり、そのスレッドモデルは MPG モデルですが、一般に Go プロセスとカーネルスレッドは多対多に対応するため、まずマルチスレッド化する必要があります。 Golang には、いわゆる M 比 N モデルがあります。N 個の go ルーチンは、M スレッドで作成できます。一般に、N は M よりもはるかに大きくなります。本質的にはマルチスレッド モデルです。ただし、コルーチンのスケジューリングは、開発者はコルーチン間の同期にチャネルを使用する必要があることが強調されています。
この記事の動作環境: Windows 10 システム、go1.20 バージョン、DELL G3 コンピューター。
Golang は単一プロセスではなく、マルチスレッドです。
Golang にはいわゆる M 比 N モデルがあります。N 個の go ルーチンは M スレッドの下で作成できます。一般に、N は M よりもはるかに大きくなります。本質的にはマルチスレッド モデルですが、スケジューリングはコルーチンは Go のランタイムによって制御されるため、この決定では、開発者がコルーチン間の同期にチャネルを使用する必要があることが強調されています。
スレッドに関しては、言語レベルがオープンではないため、マルチコルーチンモデルとして理解できます。1つのスレッド上に複数のgoルーチンを作成することができます。一般的には、スレッド数と同じ数になります。の CPU コアが作成されます。もちろん、実際にはランタイムによって決まります。
goroutine のスケジューリングに関しては、実際には常に進化しています。ここでは GMP モデルについてのみ説明します。Goroutine は M スレッドで実行されます。タスクが実行されるたびに、現在の P (プロセッサ) がチェックされます。実行可能キューには実行可能ゴルーチンが含まれており、現在の P に実行可能ゴルーチンがなくなると、別の P の実行可能キューにあるゴルーチンが盗まれます。
理論的には、ゴルーチンの作成はメモリによってのみ制限されます。一般的に、最大は 2KB です。2MB のスペースを持つスレッドの場合、理論的には、簡単に 1,000 に達します。もちろん、これは理想的な状況にすぎません。 , そのため、作成されるゴルーチンの数が増えても、OS のスレッド数は増加しません。スレッド スケジューリングは Go にとって比較的パフォーマンスを重視します。スケジュールの頻繁な切り替えはゴルーチン間でのみ発生し、スレッドは CPU の数と同じ数のアクティブ スレッドのみを維持します。
プロセスとスレッドについて
1. プロセス
プロセスは、オペレーティング システムにおけるプログラムの実行プロセスであり、リソースの割り当てとスケジューリングの基本的な基盤です。システム。ユニットとプロセスは動的な概念であり、プログラム実行中にリソースを割り当てて管理するための基本単位です。各プロセスは独自のアドレス空間を持ちます。プロセスには、初期状態、実行状態、待機状態、準備完了状態、終了状態の少なくとも 5 つの基本状態があります。
平たく言えば、プロセスとは実行中のプログラムです。
2. スレッド
スレッドはプロセスの実行インスタンスであり、プログラム実行の最小単位であり、プロセスよりも小さく、独立して実行できる基本単位です。
わかりやすく言うと、プロセスは複数のスレッドを作成でき、同じプロセス内の複数のスレッドは同時に実行できます。プログラムを実行するには、少なくとも 1 つのプロセスが必要です。
以上がgolangはマルチプロセスですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。