412 votes

Différence entre la programmation concurrente et de la programmation parallèle

J'ai une question: quelle est la différence entre la programmation simultanée et parallèle de la programmation? J'ai demandé à google mais n'ai rien trouvé qui m'a aidé à comprendre la différence. Pourriez-vous me donner un exemple pour tous les deux?

Pour l'instant j'ai trouvé cette explication: http://www.linux-mag.com/id/7411 - mais "la simultanéité est une propriété de l'émission" vs "l'exécution en parallèle est une propriété de la machine" n'est pas assez pour moi - je ne peux pas dire ce qui est quoi.

Merci d'avance pour toute réponse.

408voto

Jon Harrop Points 26951

La programmation simultanée ce qui concerne les opérations qui semblent se chevaucher, et est principalement lié à la complexité qui se pose en raison de la non-déterministe de flux de contrôle. Le quantitative des coûts associés aux prises avec d'autres programmes sont généralement à la fois le débit et la latence. Simultanées programmes sont souvent IO lié, mais pas toujours, par exemple simultanées éboueurs sont entièrement sur le CPU. L'exemple pédagogique d'un programme concurrent est un web crawler. Ce programme initie les requêtes de pages web et accepte les réponses en même temps les résultats des téléchargements deviennent disponibles, l'accumulation d'un ensemble de pages qui ont déjà été visités. Le contrôle de flux est non-déterministe, car les réponses ne sont pas nécessairement reçus dans le même ordre à chaque fois que le programme est exécuté. Cette caractéristique peut être très difficile à déboguer simultanée de programmes. Certaines applications sont fondamentalement simultanées, par exemple, les serveurs web doivent gérer les connexions de clients en même temps. Erlang est peut-être le plus prometteur à venir de la langue pour les très programmation simultanée.

La programmation parallèle concerne les opérations qui sont superposées pour l'objectif spécifique d'améliorer le débit. Les difficultés de la programmation simultanée sont éludées par la prise de contrôle de flux déterministe. En général, les programmes de spawn jeux de enfant des tâches qui s'exécutent en parallèle et le parent tâche continue seulement une fois tous les sous-tâche a fini. Cela rend les programmes parallèles beaucoup plus facile à déboguer. La partie la plus difficile de la programmation parallèle est l'optimisation de la performance à l'égard de questions telles que la granularité et de la communication. Le dernier est encore un problème dans le contexte de multicores, car il y a une considérable des coûts liés au transfert de données à partir d'une cache à l'autre. Dense de la matrice-matrice de multiplier est un exemple pédagogique de la programmation parallèle et il peut être résolu de manière efficace en utilisant Straasen de diviser et conquérir de l'algorithme et à attaquer les sous-problèmes en parallèle. Cilk est peut-être le plus prometteur de la langue pour la haute performance de la programmation parallèle sur le partage de la mémoire des ordinateurs (y compris les multicores).

345voto

Tor Valamo Points 14209

Si vous programmez à l'aide de threads (programmation simultanée), il n'est pas nécessairement à être exécuté en tant que tel (l'exécution en parallèle), car elle dépend de la machine peut gérer plusieurs threads.

Voici un exemple visuel. Les Threads d'une non filetée de la machine:

        --  --  --
     /              \
>---- --  --  --  -- ---->>

Les Threads sur une tige filetée de la machine:

     ------
    /      \
>-------------->>

Les tirets représentent le code exécuté. Comme vous pouvez le voir, ils ont tous deux séparés et exécuter séparément, mais le filetage de la machine peut exécuter plusieurs pièces à la fois.

14voto

loknath Points 133

J'ai trouvé ce contenu dans certains blog. La pensée, il est utile et pertinent.

Concurrence et parallélisme ne sont PAS la même chose. Deux tâches T1 et T2 sont concourantes si l'ordre dans lequel les deux tâches sont exécutées dans le temps n'est pas prédéterminé,

T1 peut être exécuté et terminé avant T2, T2 peut être exécuté et terminé avant T1, T1 et T2 peuvent être exécutées simultanément à la même instance de temps (parallélisme), T1 et T2 peuvent être exécutés alternativement, ... Si deux threads simultanés sont prévues par le système d'exploitation pour fonctionner sur un single-core non-SMT non-CMP processeur, vous pouvez obtenir la simultanéité, mais pas de parallélisme. Le parallélisme est possible sur multi-core, multi-processeur ou de systèmes distribués.

La simultanéité est souvent désigné comme une propriété d'un programme, et il est un concept plus général que le parallélisme.

Source: https://blogs.oracle.com/yuanlin/entry/concurrency_vs_parallelism_concurrent_programming

3voto

zbs Points 415

Bien qu'il n'est pas complet d'accord sur la distinction entre les termes parallèles et simultanées, nombreux sont les auteurs à faire les distinctions suivantes:

  • Dans simultanées de l'informatique, un programme est celui dans lequel plusieurs tâches peuvent être en cours à tout instant.
  • Dans le domaine du calcul parallèle, un programme est celui dans lequel les multiples tâches de coopérer étroitement pour résoudre un problème.

De façon parallèle les programmes sont simultanés, mais un programme comme un système d'exploitation multitâche est également simultanées, même lorsqu'il est exécuté sur une machine avec un seul cœur, depuis plusieurs tâches peuvent être en cours à tout instant.

Source: Une introduction à la programmation parallèle, Peter Pacheco

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