156 votes

Comment articuler la différence entre programmation asynchrone et parallèle?

De nombreuses plates-formes de promouvoir l'asynchronie et parallélisme en tant que moyen pour améliorer la réactivité. Je comprends la différence en général, mais souvent de la difficulté à articuler dans mon propre esprit, ainsi que pour les autres.

Je suis un quotidien programmeur et l'utilisation asynchrone & rappels assez souvent. Le parallélisme se sent exotiques.

Mais je me sens comme ils sont facilement confondues, en particulier au niveau de la langue niveau de la conception. Aimerais une description claire de la façon dont ils se rapportent (ou pas), et les classes de programmes où chacun est mieux appliquée.

95voto

CodeMan Points 390

Lorsque vous lancez quelque chose de manière asynchrone, il signifie qu'il est non-bloquante, vous l'exécuter sans attendre pour elle de remplir et de continuer avec les autres choses. Le parallélisme des moyens pour exécuter plusieurs choses en même temps, en parallèle. Le parallélisme fonctionne bien lorsque vous pouvez séparer les tâches en indépendants des morceaux de travail.

Prenons l'exemple de rendu d'une animation 3D. Le rendu de l'animation prend beaucoup de temps donc si vous étiez à lancer le rendu de l'intérieur de votre animation logiciel d'édition vous assurez-vous qu'il était en cours d'exécution asynchrone , donc il n'a pas de lock-up de votre INTERFACE utilisateur et vous pouvez continuer à faire d'autres choses. Maintenant, chaque image de l'animation peut aussi être considéré comme une tâche individuelle. Si nous avons plusieurs Processeurs/Cœurs ou plusieurs machines, nous pouvons rendre plusieurs images en parallèle pour accélérer la charge de travail globale.

81voto

igon Points 815

Je crois que la principale distinction entre la simultanéité et le parallélisme.

Async et les Rappels sont généralement un moyen (outil ou mécanisme) pour exprimer la simultanéité c'est à dire un ensemble d'entités, éventuellement, de parler les uns aux autres et le partage des ressources. Dans le cas de async ou de rappel de la communication est implicite lors de l'échange de ressources est en option (à considérer RMI où les résultats sont calculés sur un ordinateur distant). Comme le note bien ceci est généralement fait avec une réactivité à l'esprit, de ne pas attendre long temps de latence des événements.

La programmation parallèle est généralement le débit que l'objectif principal tandis que les temps de latence, c'est à dire le temps de réalisation pour un seul élément, peut-être pire qu'un équivalent programme séquentiel.

Pour mieux comprendre la distinction entre concurrence et parallélisme, je vais citer des modèles Probabilistes de la simultanéité de Daniele Varacca qui est une bonne série de notes pour une théorie de la concurrence:

Un modèle de calcul est un modèle pour la simultanéité quand il est capable de représenter des systèmes indépendants de composants autonomes, éventuellement communiquer les uns avec les autres. La notion de simultanéité ne doit pas être confondue avec la notion de parallélisme. Les calculs parallèles impliquent généralement un contrôle central qui répartit le travail entre plusieurs processeurs. Dans la simultanéité, nous soulignons l'indépendance des composants, et le fait qu'ils communiquent les uns avec les autres. Le parallélisme est comme l'ancienne Egypte, où le Pharaon décide et le travail des esclaves. La simultanéité est comme moderne en Italie, où tout le monde fait ce qu'il veut, et l'utilisation des téléphones mobiles.

En conclusion, la programmation parallèle est un peu un cas particulier de la simultanéité où des entités distinctes collaborer pour obtenir de hautes performances et le débit (en général).

Async et des Rappels sont juste un mécanisme qui permet au programmeur d'exprimer la simultanéité. Considérer que le bien-connu de la programmation parallèle des modèles de conception, tels que la maîtrise/travailleur ou de la carte/réduction sont mis en œuvre par des cadres qui utilisent le plus bas niveau des mécanismes (async) pour mettre en œuvre plus complexe centralisé des interactions.

22voto

Devrath Points 2552

Asynchrone et la programmation Parallèle sont difficiles à comprendre pour les nouveaux programmeurs

La Programmation Asynchrone: La programmation asynchrone est un paradigme de programmation qui est principalement mono-thread, c'est à dire "à la suite d'un fil continu de l'exécution".

Comme nous pouvons le voir si A,B,C des événements ont lieu simultanément, B & C n'ont aucun moyen de savoir quand la chose en A vont à

 |----A-----|
    |-----B-------| 
        |-------C------|

En parallèle de la Programmation: la programmation Parallèle est un paradigme de programmation qui est principalement plusieurs thread, c'est à dire "à la suite de nombre de threads que de nombreux simultanée d'exécution".

Ici, A, B, C toutes les tâches ont lieu simultanément, B et C ne pas attendre, car tous sont différents des tâches et de toutes les prendre à un moment (c'est à dire A, B et C sont gérés par trois différents threads)

|-----A-----|
|-----B-----| 
|-----C-----|

Donc, vous vous demanderez peut-être: "eh Bien ces sons comme la même affaire!"

En réalité, ils ne sont pas par tous les moyens. Avec un appel asynchrone, vous n'avez aucun contrôle sur les threads ou un pool de thread (qui est une collection de fils) et sont à la charge sur le système pour gérer les demandes. Avec la programmation parallèle, vous avez beaucoup plus de contrôle sur les tâches morceaux, et peut même créer un certain nombre de fils pour être manipulé par un certain nombre de cœurs du processeur. Cependant, chaque appel de rotation ou d'arracher un thread est très système intensives et des précautions supplémentaires doivent être prises en compte lors de la création de votre programmation.

18voto

Andrew Cooper Points 21126

Ma compréhension de base est:

Asynchonous programmation résout le problème de l'attente pour une opération coûteuse pour terminer avant de faire quoi que ce soit d'autre. Si vous pouvez obtenir d'autres trucs à faire pendant que vous êtes en attente pour la fin de l'opération, alors que c'est une bonne chose. Exemple: en gardant une INTERFACE utilisateur en cours d'exécution pendant aller et de récupérer plus de données à partir d'un service web.

La programmation parallèle est lié, mais est plus concerné par la rupture d'une tâche considérable dans de plus petits morceaux qui peuvent être calculées à la même heure. Les résultats de l'morceaux plus petits peuvent alors être combinées pour produire le résultat global. Exemple: "ray-tracing" où la couleur de chacun des pixels est essentiellement indépendante.

C'est probablement plus compliqué que ça, mais je pense que c'est la distinction fondamentale.

15voto

J'ai tendance à penser la différence en ces termes:

Asynchrone: Aller loin et de faire de cette tâche, lorsque vous avez fini de revenir et de me dire et de montrer les résultats. Je vais être avec les autres choses dans le temps de le dire.

Parallèle: je veux vous faire cette tâche. Si cela rend plus facile, obtenir des gens pour l'aider. C'est urgent, donc je vais attendre ici jusqu'à ce que vous revenir avec les résultats. Je ne peux rien faire d'autre jusqu'à ce que vous revenir.

Bien sûr, une tâche asynchrone peut faire usage de parallélisme, mais la différenciation du moins à mes yeux, est de savoir si vous obtenez sur d'autres choses alors que l'opération est effectuée ou si vous avez tout arrêter complètement jusqu'à ce que les résultats sont là.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X