Maison >développement back-end >Golang >Concept de pipeline

Concept de pipeline

王林
王林original
2024-07-17 17:24:071296parcourir

La définition la plus simple à comprendre de la part de l'auteur est celle de plusieurs processus qui s'exécutent simultanément, chacun faisant partie d'une série d'étapes de processus liées les unes aux autres.

L'analogie est la suivante : imaginez un flux de processus pour les sauvegardes automatiques de bases de données de routine, où de nombreuses bases de données doivent être sauvegardées. Pour la sauvegarde elle-même, nous utilisons le programme go, pas un script shell. Peut-être qu'en résumé, une série d'étapes du processus qui seront réalisées sont les suivantes.

  1. Nous avons besoin d'une liste de données de toutes les bases de données qui doivent être sauvegardées, ainsi que leurs adresses d'accès et leurs informations d'identification.
  2. Nous exécutons le processus de sauvegarde, soit séquentiellement (après db1, terminer, continuer db2, continuer db3, etc.), soit en parallèle (db1, db2, db3, etc. les processus de sauvegarde et autres sont exécutés simultanément).
  3. Dans chaque processus de sauvegarde de base de données, plusieurs processus sont effectués

A. Effectuez une opération de dump sur la base de données, la sortie se présente sous la forme de nombreux fichiers enregistrés dans un dossier.
B. Les fichiers dump sont ensuite archivés au format .zip ou .tar .gz (par exemple)
C. Le fichier d'archive est envoyé à un serveur de sauvegarde par exemple AWS S3.

Si vous prêtez attention au cas ci-dessus, il pourrait être préférable en termes de performances que le processus de sauvegarde de plusieurs bases de données soit effectué en parallèle. et sur cela l'auteur est d'accord.

Et ce serait encore mieux si les processus de chaque processus de sauvegarde de base de données, A, B et C, étaient exécutés simultanément, en faisant des trois processus (A, B, C) un processus simultané, alors les E/S seraient être plus efficace. Plus tard, entre les processus A, B et C, l'exécution restera séquentielle (car elle doit s'exécuter de manière séquentielle. Il n'est pas permis si, par exemple, B est exécuté en premier, puis A) ; Cependant, la goroutine qui sera chargée de l’exécution du processus A est complète. nous pouvons continuer avec l'exécution B (qui est la prochaine étape du processus A) plus l'exécution d'autres processus (une autre base de données) ; en parallèle. Ainsi, la goroutine qui gère A ne devient pas inactive.

Veuillez prêter attention à la visualisation suivante. La colonne est une représentation de goroutines qui s'exécutent simultanément. Mais comme les trois goroutines sont une série de processus, les processus sont toujours séquentiels, tandis que les lignes représentent une séquence.

Image description

En Go, généralement le processus sous forme de goroutine qui est exécuté est concurrent, mais en flow il doit être séquentiel, on l'appelle un pipeline, donc pour le moment supposons simplement que le pipeline A est un goroutine pour le processus A, le pipeline B est la goroutine B et ainsi de suite.

Pour faciliter la compréhension du tableau, veuillez suivre l'explication séquentielle :

  1. Séquence 1 : le pipeline A effectuera un processus de vidage à partir de db1. dans le même temps, les pipelines B et C sont inactifs. 2. Séquence 2 : le processus factice db1 est terminé, puis passez à l'étape suivante, à savoir le processus de vidage des données db1 d'archive effectué par le pipeline B. et en même temps, le pipeline A exécute le processus de vidage db2. Le pipeline C est toujours inactif.
  2. Séquence 3 : le pipeline A exécute le processus de vidage DB3. Dans le même temps, le pipeline B n'a pas encore exécuté le processus de réalisation de DB2 qui a été vidé car l'archivage de DB1 n'est toujours pas terminé. Le pipeline est toujours inactif.
  3. Séquence 4 : le processus d'archivage db1 est terminé, puis passez à l'étape suivante, à savoir l'envoi de l'archive au serveur de sauvegarde, dont le processus est géré par le pipeline C. Au même moment, le pipeline B commence à exécuter db2 archivage de dump de données et pipeline A dumping
  4. ... et ainsi de suite.

Dans cet exemple, nous supposons que le pipeline A n'a qu'un seul goroutine, le pipeline B a également un goroutine, tout comme le pipeline C. Mais en réalité, dans la mise en œuvre dans le monde réel, il peut y avoir plusieurs goroutines pour chaque pipeline (plusieurs goroutines pour le pipeline A, beaucoup de goroutines pour le pipeline B, de nombreuses goroutines pour le pipeline C).

J'espère que mes écrits pourront expliquer. Même si ce n'est pas clair, Internet est ouvert avec les sources LAN.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn