ホームページ >バックエンド開発 >Golang >パイプラインの概念

パイプラインの概念

王林
王林オリジナル
2024-07-17 17:24:071299ブラウズ

著者が最も理解しやすい定義は、同時に実行される複数のプロセスであり、それぞれのプロセスは相互に関連する一連のプロセス ステージの一部です。

このアナロジーは次のとおりです。バックアップ対象のデータベースが多数ある場合の、定期的なデータベースの自動バックアップのプロセス フローを想像してください。バックアップ自体には、シェル スクリプトではなく go プログラムを使用します。おそらく、実行される一連のプロセス段階の概要は次のとおりです。

  1. バックアップする必要があるすべてのデータベースのデータ リストと、それらのアクセス アドレスおよび資格情報が必要です。
  2. バックアップ プロセスは、順次 (db1、終了、db2 の続行、db3 の続行など) または並列 (db1、db2、db3 などのバックアップ プロセスと他のプロセスが同時に実行されます) で実行されます。
  3. 各データベース バックアップ プロセスでは、いくつかのプロセスが実行されます

A.データベースに対してダンプ操作を実行すると、出力はフォルダーに保存された多数のファイルの形式になります。
B. ダンプ ファイルは、.zip または .tar .gz 形式でアーカイブされます (例)
C. アーカイブ ファイルは、AWS S3 などのバックアップ サーバーに送信されます。

上記のケースに注意すると、多数のデータベースのバックアップ処理を並行して実行した方がパフォーマンスの点で優れている可能性があります。これには著者も同意します。

そして、3 つのプロセス (A、B、C) を並行プロセスにして、各データベース バックアップ プロセス A、B、C のプロセスが並行して実行されればさらに良いでしょう。その場合、I/O は次のようになります。より効率的になります。その後、プロセス A、B、および C の間では、実行はシーケンシャルのままになります (プロセスはシーケンシャルに実行する必要があるためです。たとえば、B が最初に実行され、次に A が実行されることは許可されません)。ただし、プロセス A の実行を担当するゴルーチンは完了しています。実行 B (プロセス A の次の段階) に加えて、他のプロセス (別のデータベース) の実行を続行できます。並行して。したがって、A を処理するゴルーチンはアイドル状態になりません。

次の視覚化に注目してください。この列は、同時に実行されるゴルーチンを表しています。ただし、3 つのゴルーチンは一連のプロセスであるため、プロセスは常に連続しており、行はシーケンスを表します。

Image description

Go では、実行される goroutine 形式のプロセスは一般に同時実行されますが、フローではシーケンシャルである必要があり、パイプラインと呼ばれます。そのため、当面はパイプライン A がプロセスの goroutine であると仮定します。 A、パイプライン B はゴルーチン B など。

表を理解しやすくするために、次の順序で説明してください。

  1. シーケンス 1: パイプライン A は db1 からのダンプ プロセスを実行します。同時に、パイプライン B と C はアイドル状態になります。 2. シーケンス 2: db1 ダミー プロセスが完了すると、次の段階、つまりパイプライン B によって実行されるアーカイブ db1 データ ダンプ プロセスに進みます。同時に、パイプライン A によって db2 ダンプ プロセスが実行されます。パイプライン C はまだアイドル状態です。
  2. シーケンス 3: パイプライン A は db3 ダンプ プロセスを実行しています。同時に、パイプライン B は、db1 のアーカイブがまだ完了していないため、ダンプされた db2 アーカイブ プロセスをまだ実行していません。パイプラインはまだアイドル状態です。
  3. シーケンス 4: db1 アーカイブ プロセスが完了したら、次の段階に進みます。つまり、アーカイブをバックアップ サーバーに送信します。このプロセスはパイプライン C によって処理されます。同時に、パイプライン B が db2 の実行を開始します。データダンプのアーカイブとパイプライン A ダンピング
  4. ... など

この例では、パイプライン A にはゴルーチンが 1 つだけあり、パイプライン B にもゴルーチンが 1 つだけあり、パイプライン C にもゴルーチンが 1 つあると仮定しています。しかし実際の実装では、各パイプラインに多数のゴルーチンが存在する可能性があります (パイプライン A には多数のゴルーチン、パイプライン B には多数のゴルーチン、パ​​イプライン C には多数のゴルーチン)。

私の文章で説明できれば幸いです。たとえ明確ではなくても、インターネットは LAN ソースでオープンです。

以上がパイプラインの概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。