著者が最も理解しやすい定義は、同時に実行される複数のプロセスであり、それぞれのプロセスは相互に関連する一連のプロセス ステージの一部です。
このアナロジーは次のとおりです。バックアップ対象のデータベースが多数ある場合の、定期的なデータベースの自動バックアップのプロセス フローを想像してください。バックアップ自体には、シェル スクリプトではなく go プログラムを使用します。おそらく、実行される一連のプロセス段階の概要は次のとおりです。
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 つのゴルーチンは一連のプロセスであるため、プロセスは常に連続しており、行はシーケンスを表します。
Go では、実行される goroutine 形式のプロセスは一般に同時実行されますが、フローではシーケンシャルである必要があり、パイプラインと呼ばれます。そのため、当面はパイプライン A がプロセスの goroutine であると仮定します。 A、パイプライン B はゴルーチン B など。
表を理解しやすくするために、次の順序で説明してください。
この例では、パイプライン A にはゴルーチンが 1 つだけあり、パイプライン B にもゴルーチンが 1 つだけあり、パイプライン C にもゴルーチンが 1 つあると仮定しています。しかし実際の実装では、各パイプラインに多数のゴルーチンが存在する可能性があります (パイプライン A には多数のゴルーチン、パイプライン B には多数のゴルーチン、パイプライン C には多数のゴルーチン)。
私の文章で説明できれば幸いです。たとえ明確ではなくても、インターネットは LAN ソースでオープンです。
以上がパイプラインの概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。