ホームページ  >  記事  >  バックエンド開発  >  Golang - 並行性、並列性、シーケンス

Golang - 並行性、並列性、シーケンス

王林
王林転載
2024-02-09 22:00:101030ブラウズ

Golang - 并发、并行、顺序

php Xiaobian Xigua は、Golang の並行性、並列性、順序という 3 つの重要な概念を紹介します。同時プログラミングでは、Golang は同時操作を実装するための豊富なツールと構文を提供し、プログラムが複数のタスクを同時に処理できるようにします。並列プログラミングとは、マルチコアプロセッサを利用して複数のタスクを同時に実行し、プログラムの実行効率を向上させることです。シーケンシャル プログラミングはコードの順序で実行されるため、タスクを特定の順序で実行する必要があるシナリオに適しています。これら 3 つの概念を柔軟に使用することで、開発者は同時実行性の高いシナリオで Golang の利点を最大限に活用し、プログラムのパフォーマンスと効率を向上させることができます。

質問内容

私は今 Go を勉強しているのですが、並行性、並列性、逐次性の違いにとてもイライラしています。

5 つの URL のフラグメントをインターセプトし、その内容をテキスト ファイルに貼り付けるプロセスがあるとします。このプロセスには URL ごとに 2 秒かかります。

  • Sequentially -> は次々に実行されるため、10 秒かかります
  • Parallel -> これらの操作は複数のスレッドまたはプロセッサを使用して同時に実行されるため、所要時間は 10 秒未満です。
  • 同時実行 -> 所要時間は 10 秒未満ですが、複数のスレッドやプロセッサは必要ありません。

この時点までは自分の考えが正しいかどうかわかりません。私の質問は:

並列処理は物事を同時に行うこと (ランニングと音楽を聴くなど)、並行処理は物事を同時に行うこと (シャツにアイロンをかけている間に朝食を終えるなど) と読んだことがあります。

しかし、そうであれば、なぜ同時実行が完了するまでに 10 秒もかからないのでしょうか。結局のところ、すべてを同時に実行しているわけではなく、すべてが完了するまですべてのサブセットを実行しているだけだからです。 ?

解決策

これを例えで説明します。

卵を5個、目玉焼きにする必要があります。卵を調理するには、フライパンに卵を割り入れ、数分間待ってから取り出します。

  • この順番の方法では、最初の卵、次に 2 番目の卵というように、5 個の卵が焼けるまで炒めます。

  • これと並行して、5 人の料理人を雇い、それぞれに卵を 1 個ずつ目玉焼きにしてもらい、全員が焼き上がるまで待つという方法もあります。

  • 並行して行う方法は、卵 5 個すべてを自分で調理することです。実際に 。つまり、各卵を素早くフライパンに割り入れ、準備ができたら各卵を取り出します。

5 人のシェフを雇わずに時間を節約できる理由は、シェフの数によってスピードが制限されないためです。ポーチドエッグを作るのには数分かかりますが、最初と最後に集中力と手を使うのはほんの数秒だけです。

Go ランタイムは、最新のオペレーティング システム ランタイムと同じくらいスマートです。彼らは、スレッドがネットワーク応答の受信を待っている間に、プロセッサが注意を向けるべき他のものを見つけることができることを知っています。

同時実行性の全体像は、プロセッサの数ではなく、全体的なリソースの競合です。タスクの実行にはリソースが必要であり、利用可能な以上のリソースを使用することはできません。プロセッサはリソースですが、メモリ ストレージ、メモリ帯域幅、ネットワーク帯域幅、ファイル ハンドルなどもあります。

以上がGolang - 並行性、並列性、シーケンスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。