Golang ゴルーチン プロセス、スレッド、同時実行、並列処理

goroutine は要件を調べます


要件: 1 から 200000000000 までの数を数える必要がありますが、どれが素数ですか?

アイデアの分析:

1) 従来の方法は、ループを使用して各数値が素数かどうかを判断することです (1 つのタスクが 1 つの CPU に割り当てられるため、非常に非経済的で非常に時間がかかります)

2) 同時実行または並列処理を使用して、素数を数えるタスクを複数のゴルーチンに割り当てて完了しますこの場合、ゴルーチンが使用されます (速度はコアの数に関係します)

Goroutine は同時並列処理を実行できるため、大きなタスクを完了するために個々の Goroutine に分割できます。

 

プロセスとスレッドの説明


1) プロセスは、オペレーティング システムにおけるプログラムの実行プロセスであり、システムにおけるリソースの割り当てとスケジューリングの基本単位です。

2) スレッドとは、プロセスの実行インスタンスであり、プログラム実行の最小単位であり、プロセスよりも小さく、独立して実行できる基本単位です。

3) プロセスはコアを作成して複数のスレッドを破棄でき、同じプロセス内の複数のスレッドを同時に実行できます。

4) プログラムには少なくとも 1 つのプロセス、プロセス、および少なくとも 1 つのスレッドがあります。

Thunder をダブルクリックするとプロセスが開始され、1 つの Thunder で複数のファイルをダウンロードできます。各ダウンロード タスクはスレッドとして見なされるため、CPU のパフォーマンスが最大化されます。

同時実行は並列処理には適していません。実際には、5 つの同時ダウンロードのように見えます。実際、タイム スライスは非常に短いです。ミクロな観点から見ると、実際には、ある時点でダウンロードされるファイルは 1 つだけです。

 

 

 

並行性と並列性


1) マルチスレッド プログラムは1 つのコアで実行されます。これは同時実行性を意味します。

2) マルチスレッドプログラムは複数のコアで実行されます。これは並列処理です。

同時実行性: CPU 上にあるため、たとえば 10 個のスレッドがあり、各スレッドは 10 ミリ秒間実行されます (ポーリング操作)。人間の観点からは 10 個のスレッドがすべて実行されているように見えますが、ミクロな観点から見ると、ある時点では、実際には 1 つのスレッドだけが実行されます。これが同時実行です。

並列処理: 複数の CPU (たとえば、10 個の CPU がある) 上にあるため、たとえば 10 個のスレッドがあり、各スレッドは 10 ミリ秒実行されます (それぞれが異なる CPU で実行されます)。人間の観点から見ると、これら 10 個のスレッドは次のようになります。実行中ですが、ミクロな観点から見ると、ある時点で 10 個のスレッドが同時に実行されており、これが並列処理です。

従来のプログラミング言語では、複数のタスクでも1つのCPUに割り当てられるため、マルチコアの力を発揮できませんでした。

Go 言語は、同時実行を並列処理に変換するものです。

おすすめ

転載: blog.csdn.net/qq_34556414/article/details/132841317