並行プログラミングを学習するとき、並行性と並列性という 2 つの概念をよく耳にします。これら 2 つの用語は同じ意味で使用されることがありますが、実際には 2 つの異なる概念を表します。 Go 言語では、同時実行と並列処理の本質的な違いを理解することが、効率的で信頼性の高い同時実行プログラムを作成するために重要です。
まず、同時実行性の概念を理解しましょう。同時実行性とは、複数のタスクを同時に実行できるようにするプログラミング方法を指しますが、必ずしも同時に実行できるわけではありません。同時実行モデルでは、タスクは交互に実行でき、「同時」実行の効果はコンテキストを切り替えることによって実現されます。 Go 言語では、ゴルーチンを使用して同時実行性を実現できます。各ゴルーチンは、同時に実行されるタスクを表します。
以下は、同時実行性を実現するために goroutine を使用する方法を示す簡単な例です:
package main import ( "fmt" "time" ) func printNumbers() { for i := 1; i <= 5; i++ { fmt.Println(i) time.Sleep(1 * time.Second) } } func main() { go printNumbers() go printNumbers() time.Sleep(6 * time.Second) }
上の例では、1 から数値を出力する printNumbers
関数を定義します。 5まで。 main
関数では、2 つの printNumbers
ゴルーチンが go
キーワードによって開始され、同時に実行できるようになります。 time.Sleep
関数を使用して、ゴルーチンの実行に十分な時間を確保するために十分な時間を待ちます。
次に、並列処理の概念を見てみましょう。並列処理とは、複数のタスクが実際に同時に実行されることを意味し、マルチコア プロセッサの特性を使用してパフォーマンスを向上させることができます。 Go 言語では、runtime
パッケージの GOMAXPROCS
を使用して並列度を設定し、同時に実行できるゴルーチンの数を指定できます。
次に、並列処理の使用例を示します。
package main import ( "fmt" "runtime" "sync" ) func printNumbers(wg *sync.WaitGroup) { defer wg.Done() for i := 1; i <= 5; i++ { fmt.Println(i) } } func main() { runtime.GOMAXPROCS(2) // 设置并行度为2 var wg sync.WaitGroup wg.Add(2) go printNumbers(&wg) go printNumbers(&wg) wg.Wait() }
上の例では、sync.WaitGroup
を使用して、すべてのゴルーチンの実行が完了するのを待ちます。 runtime.GOMAXPROCS
を通じて並列処理を 2 に設定し、2 つのゴルーチンを同時に実行できるようにします。実際のアプリケーションでは、マシンのコア数やタスクの特性に応じて並列処理を合理的に設定することで、マルチコア プロセッサによってもたらされるパフォーマンスの利点を最大限に活用できます。
上記の例を通して、Go 言語における同時実行性と並列性の応用がわかります。並行性は、複数のタスクを交互に実行できるようにするプログラミング パラダイムです。並列性は、マルチコア プロセッサを使用して複数のタスクを同時に実行し、プログラムのパフォーマンスを向上させます。効率的で信頼性の高い同時実行プログラムを作成するには、同時実行と並列処理の本質的な違いを理解することが重要です。上記の例が、Go 言語の並行性と並列性の概念をより深く理解するのに役立つことを願っています。
以上がGo 言語の同時実行性と並列性の本質的な違いを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。