Maison  >  Article  >  développement back-end  >  Golang - Concurrence, Parallélisme, Séquence

Golang - Concurrence, Parallélisme, Séquence

王林
王林avant
2024-02-09 22:00:101030parcourir

Golang - 并发、并行、顺序

l'éditeur php Xigua vous présente les trois concepts importants de concurrence, de parallélisme et de séquence dans Golang. En programmation simultanée, Golang fournit une multitude d'outils et de syntaxes pour implémenter des opérations simultanées, permettant au programme de gérer plusieurs tâches en même temps. La programmation parallèle consiste à exécuter plusieurs tâches en même temps et à améliorer l'efficacité de l'exécution du programme en utilisant des processeurs multicœurs. La programmation séquentielle est exécutée dans l'ordre du code, ce qui convient aux scénarios où il est nécessaire de garantir que les tâches sont exécutées dans un ordre spécifique. En utilisant de manière flexible ces trois concepts, les développeurs peuvent exploiter pleinement les avantages de Golang dans des scénarios à forte concurrence et améliorer les performances et l'efficacité du programme.

Contenu de la question

J'apprends Go en ce moment et je suis vraiment frustré par les différences entre la concurrence, le parallélisme et le séquentiel.

Supposons que nous ayons un processus qui intercepte des fragments de 5 URL et colle le contenu dans un fichier texte. Ce processus prend 2 secondes par URL.

  • Séquentiellement -> prend 10 secondes car il s'exécute l'un après l'autre
  • Parallèle -> Prend moins de 10 secondes car il effectue ces opérations simultanément mais en utilisant plusieurs threads ou processeurs.
  • Concurrency -> Prend moins de 10 secondes mais ne nécessite pas plusieurs threads ou processeurs.

Jusqu’à ce point, je n’étais pas sûr d’avoir raison. Ma question est :

J'ai lu que le parallélisme consiste à faire des choses en même temps (comme courir et écouter de la musique), tandis que la concurrence consiste à faire des choses en même temps (comme finir son petit-déjeuner en repassant sa chemise).

Mais si tel est le cas, pourquoi la simultanéité ne prend-elle pas 10 secondes, car en fin de compte, vous ne faites pas tout en même temps, mais seulement un sous-ensemble de tout jusqu'à ce que tout soit fait ?

Solution

Voici une analogie à expliquer.

Vous devez faire frire 5 œufs, côté ensoleillé vers le haut. Pour cuire des œufs, cassez-les dans la poêle, attendez quelques minutes, puis retirez-les.

  • La méthode séquentielle consiste à faire frire d'abord le premier œuf, puis le deuxième œuf, et ainsi de suite jusqu'à ce que vous ayez frit 5 œufs.

  • La méthode parallèle consiste à embaucher 5 chefs, à leur faire frire chacun un œuf, puis à attendre qu'ils aient tous fini.

  • La méthode parallèle consiste à suivre la recette actuellecuire vous-même les 5 œufs. Autrement dit, vous cassez rapidement chaque œuf dans la poêle, puis vous retirez chaque œuf lorsqu'il est prêt.

La raison pour laquelle vous gagnez du temps en n'embauchant pas 5 chefs est que le nombre de chefs ne limite pas votre vitesse. Pocher un œuf prend quelques minutes mais n'occupe votre attention et vos mains que quelques secondes au début et à la fin.

Le runtime Go est aussi intelligent que les runtimes des systèmes d’exploitation modernes. Ils savent que pendant que votre thread attend de recevoir une réponse du réseau, le processeur peut trouver d'autres éléments qui occuperont son attention.

La situation générale de la concurrence ne concerne pas principalement le nombre de processeurs, mais plutôt le conflit global en matière de ressources. L’exécution des tâches nécessite des ressources et nous ne pouvons pas utiliser plus de ressources que celles disponibles. Le processeur est une ressource, mais il existe également du stockage mémoire, de la bande passante mémoire, de la bande passante réseau, des descripteurs de fichiers, etc.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer