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 言語は、同時実行を並列処理に変換するものです。