Quelle est la différence entre concurrence et parallélisme?

Quelle est la différence entre la concurrence et le parallélisme?

Les exemples

sont appréciés.

785
demandé sur nbro 2009-06-26 21:18:02

30 réponses

Simultanéité est lorsque deux ou plusieurs tâches peuvent démarrer, exécuter, et de terminer dans le chevauchement des périodes de temps. Cela ne veut pas nécessairement dire qu'ils courront tous les deux au même moment. Par exemple, multitâche sur une machine à noyau unique.

parallélisme correspond au moment où les tâches littéralement sont exécutées en même temps, p.ex. sur un processeur multicore.


, Citant du Soleil Multithread " Guide de Programmation :

  • Concurrence: une condition qui existe quand au moins deux fils font des progrès. Une forme plus généralisée de parallélisme qui peut inclure le découpage du temps comme une forme de parallélisme virtuel.

  • parallélisme: une condition qui se pose quand au moins deux fils sont exécution simultanée.

958
répondu RichieHindle 2018-01-16 18:06:48

pourquoi la Confusion existe

il y a Confusion parce que le sens de ces deux mots dans les dictionnaires est presque le même:

  • Concurrent : existant, se produisant, ou fait en même temps(dictionary.com)
  • parallèle : très similaire et se produisant souvent en même temps(merriam webster).

l'informatique et la programmation sont assez différentes. Voici mon interprétation:

  • Concurrence : Interruptibilité
  • Parallélisme : Indépendance

alors qu'est-ce que j'entends par définitions ci-dessus?

je vais clarifier avec une analogie du monde réel. Disons que vous devez faire 2 tâches très importantes dans un jour:

  1. obtenir un passeport
  2. présentation

maintenant, le problème est que la tâche-1 exige que vous alliez à un bureau gouvernemental extrêmement bureaucratique qui vous fait attendre pendant 4 heures dans une file d'attente pour obtenir votre passeport. En attendant, la tâche-2 est requise par votre bureau, et c'est une tâche critique. Les deux doivent être terminés un jour donné.

Cas 1: Exécution Séquentielle

normalement, vous conduirez jusqu'au bureau des passeports pendant 2 heures, vous attendrez dans la file pendant 4 heures, vous ferez la tâche, vous retournerez deux heures en arrière, vous rentrerez à la maison, vous resterez à l'écart pendant 5 heures supplémentaires et vous ferez la présentation.

Case 2: Exécution Concurrente

Mais tu es intelligent. Vous planifier à l'avance. Vous transportez un ordinateur portable avec vous, et en attendant dans la ligne, vous commencez à travailler sur votre présentation. De cette façon, une fois que vous revenez à la maison, vous avez juste besoin de travailler 1 heure supplémentaire au lieu de 5.

Dans ce cas, les deux tâches sont fait par vous, juste en morceaux. Vous avez interrompu la tâche du passeport en attendant dans la file et travaillé sur la présentation. Quand votre numéro a été appelé, vous avez interrompu la tâche de présentation et êtes passé à la tâche de passeport. L'économie de temps était essentiellement possible en raison de l'interruption des deux tâches.

la Simultanéité, de l'OMI, doit être pris comme "l'isolement" dans l'ACIDE propriétés d'une base de données. Deux base de données les transactions satisfont à l'exigence d'isolement si vous effectuez des sous-transactions dans chacune d'elles d'une manière quelconque et que le résultat final est le même que si les deux tâches étaient effectuées en série. Rappelez-vous, que pour les deux tâches de passeport et de présentation, vous êtes le seul exécuteur .

Case 3: Exécution Parallèle

Maintenant, puisque vous êtes si intelligent fella, vous êtes évidemment un plus, et vous avez un assistant. Donc, avant de vous quitter pour commencer la tâche passeport, vous l'appelez et lui dire de préparer la première ébauche de la présentation. Vous passez votre journée entière et finissez la tâche de passeport, revenez voir vos mails, et vous trouvez le brouillon de présentation. Il a fait un travail assez solide et avec quelques modifications dans 2 heures de plus, vous le finalisez.

depuis, votre compagnon est tout aussi intelligent que vous, il a pu travailler sur indépendamment , sans avoir à constamment vous demander pour clarification. Ainsi, en raison de l'indépendance des tâches, elles ont été effectuées en même temps par deux exécuteurs différents .

toujours avec moi? Alright...

Case 4: Concurrent Mais Pas Parallèle

rappelez-vous votre tâche de passeport, où vous devez attendre dans la ligne? Puisqu'il s'agit du votre passeport, votre assistant ne peut pas faire la queue pour vous. Ainsi, la tâche passeport a interruptibilité (vous pouvez l'arrêter en attendant dans la ligne, et le reprendre plus tard quand votre numéro est appelé), mais pas indépendance (votre assistant ne peut pas attendre à votre place).

Affaire 5: Parallèle Mais Non Concurrent

Suppose que le bureau du gouvernement a un contrôle de sécurité pour entrer dans les locaux. Ici, vous devez supprimer tous les appareils électroniques et les soumettre à la officiers, et ils ne vous rendent vos appareils qu'après que vous ayez terminé votre tâche.

dans ce cas, la tâche de passeport n'est ni independentable ni interruptible . Même si vous attendez dans la file d'attente, vous ne pouvez pas travailler sur autre chose parce que vous n'avez pas l'équipement nécessaire.

de même, dire la présentation est de nature tellement mathématique que vous exigez 100% de concentration pour au moins 5 heures. Vous ne pouvez pas le faire en attendant en ligne pour passeport tâche, même si vous avez votre ordinateur portable avec vous.

dans ce cas, la tâche de présentation est indépendant (vous ou votre assistant pouvez mettre dans 5 heures d'effort focalisé), mais pas interruptible .

Case 6: exécution simultanée et parallèle

maintenant, dites qu'en plus d'affecter votre assistant à la présentation, vous avez également un ordinateur portable avec vous à la tâche passeport. En attendant dans la file, vous voyez que votre assistant a créé les 10 premières diapositives dans un deck partagé. Vous envoyer des commentaires sur son travail avec quelques corrections. Plus tard, quand vous arrivez à la maison, au lieu de 2 heures pour finaliser le brouillon, vous avez juste besoin de 15 minutes.

cela a été possible parce que la tâche de présentation a indépendance (l'un d'entre vous peut le faire) et interruptibilité (vous pouvez l'arrêter et le reprendre plus tard). Ainsi vous avez exécuté simultanément les deux tâches , et exécuté la tâche de présentation en parallèle.

disons que, en plus d'être excessivement bureaucratique, le bureau du gouvernement est corrompu. Ainsi, vous pouvez montrer votre identification, l'entrer, commencer à attendre dans la ligne pour votre numéro d'être appelé, soudoyer un garde et quelqu'un d'autre pour tenir votre position dans la ligne, se faufiler, revenir avant que votre numéro soit appelé, et de reprendre l'attente vous-même.

dans ce cas, vous pouvez effectuer les tâches de passeport et de présentation simultanément et en parallèle. Vous pouvez vous faufiler dehors, et votre poste est tenu par votre assistant. Vous pourrez ensuite travailler sur la présentation, etc.


retour à L'Informatique

Dans le monde de l'informatique, voici des exemples de scénarios typiques de chacun de ces cas:

  • Case 1: interrompre le traitement.
  • Case 2: Lorsqu'il n'y a qu'un seul processeur, mais que toutes les tâches d'exécution ont des temps d'attente en raison de I / O.
  • cas 3: souvent vu quand nous parlons de réduire la carte ou Hadoop clusters.
  • Case 4: je pense que la Case 4 est rare. C'est rare pour une tâche concurrente mais pas en parallèle. Mais il pourrait se produire. Par exemple, supposons que votre tâche nécessite l'accès à une puce computationnelle spéciale qui ne peut être accessible que par le processeur-1. Ainsi, même si le processeur-2 est libre et que le processeur-1 exécute une autre tâche, la tâche spéciale de calcul ne peut pas se poursuivre sur le processeur-2.
  • Case 5: également rare, mais pas aussi rare que le cas 4. Un code non concurrent peut être une région critique protégée par les mutex. Une fois qu'il est lancé, il doit exécuter à l'achèvement. Cependant, deux régions critiques peuvent évoluer simultanément sur deux processeurs différents.
  • Cas 6: de l'OMI, la plupart des discussions parallèles ou de la programmation simultanée sont essentiellement parler de Cas 6. Il s'agit d'un mélange d'exécutions parallèles et simultanées.

concurrence et Go

Si vous voyez pourquoi Rob Pike dit que la concurrence est meilleure, vous devez comprendre que la raison est. Vous avez une tâche très longue dans laquelle il ya de multiples périodes d'attente où vous attendez pour certaines opérations externes comme la lecture de fichiers, le téléchargement réseau. Dans sa conférence, tout ce qu'il dit est, "il suffit de briser cette longue tâche séquentielle de sorte que vous pouvez faire quelque chose d'utile pendant que vous attendez."C'est pourquoi il parle de différentes organisations avec différents gaufres.

maintenant la force de Go vient de rendre cette rupture vraiment facile avec go mot-clé et les canaux. En outre, il y a un excellent support sous-jacent dans le runtime pour programmer ces goroutines.

mais essentiellement, la concurrence est-elle meilleure que le parallélisme?

les pommes sont-elles préférées aux oranges?

259
répondu Methos 2018-05-01 17:52:45

j'aime Rob Pike parler: la Simultanéité n'est pas de Parallélisme (c'est mieux!) (présentation) (talk)

Rob parle habituellement de Go et aborde habituellement la question de la concurrence vs le parallélisme dans une explication visuelle et intuitive! Voici un bref résumé:

tâche: brûlons une pile de manuels de langues obsolètes! Un à la fois!

Task

simultanéité: il y a plusieurs décompositions simultanées de la tâche! Un exemple:

Gophers

parallélisme: la configuration précédente se produit en parallèle s'il y a au moins 2 gaufres travaillant en même temps ou non.

219
répondu asfer 2016-08-11 17:44:52

pour ajouter à ce que d'autres ont dit:

C'est comme avoir un jongleur qui jongle avec plusieurs balles. Peu importe comment il semble, le jongleur attrape/jette seulement une balle par main à la fois. Le parallélisme est d'avoir plusieurs jongleurs qui jonglent avec des balles simultanément.

119
répondu Thomas T 2016-10-17 07:23:59

dites que vous avez un programme qui a deux fils. Le programme peut être exécuté de deux façons:

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

dans les deux cas, nous sommes en concurrence du simple fait que nous avons plus d'un fil courant.

si nous faisions tourner ce programme sur un ordinateur avec un seul noyau CPU, L'OS changerait entre les deux threads, permettant à un thread de fonctionner à la fois.

si nous avons exécuté ce programme sur un ordinateur avec un CPU multi-core alors nous serions en mesure d'exécuter les deux threads dans parallèle - côte à côte au même moment exact.

86
répondu Pithikos 2018-01-11 22:55:16

simultanéité: si deux ou plusieurs problèmes sont résolus par un seul processeur. alt text

Parallélisme: Si un problème est résolu par plusieurs processeurs.

alt text

36
répondu Rajendra Uppal 2010-11-14 07:12:41

je vais essayer d'expliquer avec un exemple intéressant et facile à comprendre. :)

supposer Qu'une organisation organise un tournoi d'échecs où 10 joueurs ( avec des compétences égales de jeu d'Échecs ) défiera un champion professionnel joueur d'Échecs. Et puisque les échecs est 1: 1 jeu donc les organisateurs doivent conduire 10 jeux de manière efficace dans le temps afin qu'ils puissent terminer l'ensemble de l'événement comme rapidement que possible.

J'espère que les scénarios suivants décriront facilement les multiples façons de mener ces 10 jeux:

1) SERIAL - permet de dire que le professionnel joue avec chaque personne un par un i.e. commence et termine le jeu avec une personne, puis commence le jeu suivant avec la personne suivante et ainsi de suite. En d'autres termes, ils ont décidé de mener les jeux de manière séquentielle. Donc si un jeu prend 10 minutes à compléter alors 10 jeux va prendre 100 minutes, supposent également que la transition d'un jeu à l'autre prend 6 secondes puis pour 10 jeux, il sera 54 secondes (approx. 1 min).

de sorte que l'ensemble de l'événement se terminera approximativement en 101 minutes ( WORST APPROACH )

2) CONCURRENT - permet de dire que le professionnel joue son tour et passe au joueur suivant de sorte que les 10 joueurs jouent simultanément, mais le joueur professionnel n'est pas avec deux personne à la fois, il joue son tour et passe à la personne suivante. Supposons maintenant que le joueur professionnel prend 6 sec pour jouer son tour et aussi le temps de transition du joueur professionnel B / W deux joueurs est de 6 sec donc le temps de transition total pour revenir au premier joueur sera de 1min (10x6sec). Par conséquent, au moment où il est de retour à la première personne avec qui l'événement a commencé, 2mins ont passé (10xtime_per_turn_by_champion + 10xtransition_time=2mins)

en supposant que tous les joueurs prennent 45sec pour compléter leur tour donc basé sur 10 minutes par jeu de L'événement de série le no. (45+6) = 11 tours (approx.)

ainsi, l'ensemble de l'événement se terminera approximativement en 11xtime_per_turn_by_player_ & _champion + 11xtransition_time_across_10_players = 11x51 + 11x60sec= 561 + 660 = 1221sec = 20.35 minutes (approximativement)

voir L'amélioration de 101 minutes à 20,35 minutes ( meilleure approche )

3) parallèle - disons que les organisateurs obtiennent des fonds supplémentaires et a donc décidé d'inviter deux joueurs champion professionnel (les deux également capable) et divisé l'ensemble des mêmes 10 joueurs (Challenger) en deux groupes de 5 chacun et les a assignés à deux champions c.-à-d. un groupe chacun. Maintenant l'événement progresse en parallèle dans ces deux ensembles c'est à dire au moins deux joueurs (un de chaque groupe de jouer contre les deux professionnels les joueurs de leur groupe respectif.

cependant au sein du groupe le joueur professionnel avec prendre un joueur à la fois (c.-à-d. séquentiellement) donc sans aucun calcul, vous pouvez facilement déduire que tout l'événement sera approximativement complet en 101/2=50.5 minutes à compléter

voir L'amélioration de 101 minutes à 50,5 minutes ( bonne approche )

4) CONCURRENT + parallèle - ci-dessus scénario, disons que les deux joueurs Champions joueront en même temps (lisez le 2e point) avec les 5 joueurs de leur groupe respectif, donc maintenant les jeux entre les groupes se déroulent en parallèle, mais au sein du groupe ils se déroulent en parallèle.

ainsi, les jeux d'un groupe seront approximativement terminés en 11xtime_per_turn_by_player_&_champion + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sec = 15.5 mins (approximativement)

donc le tout l'événement (impliquant deux de ces groupes de course en parallèle) se terminera approximativement en 15,5 minutes 151910920"

voir L'amélioration de 101 minutes à 15,5 minutes ( meilleure approche )

NOTE: dans le scénario ci-dessus si vous remplacez 10 joueurs avec 10 Emplois similaires et deux joueurs professionnels avec deux cœurs de processeur alors de nouveau l'ordre suivant restera vrai:

SÉRIE > PARALLÈLE > CONCURRENT > CONCURRENT + PARALLÈLE

(NOTE: Cet ordre Pourrait changer pour d'autres scénarios, car cet ordre dépend fortement de l'interdépendance des emplois, des besoins en communication des emplois B/w et des frais généraux de transition des emplois b/w)

27
répondu sactiw 2015-04-22 12:23:33

concurency: flux d'exécution multiples avec la possibilité de partager des ressources

Ex: deux threads en compétition pour un port D'E / S.

paralelism: diviser un problème en plusieurs morceaux similaires.

Ex: analyser un gros fichier en exécutant deux processus sur chaque moitié du fichier.

25
répondu Mihai Toader 2012-08-07 16:17:26

ils résolvent différents problèmes. La simultanéité résout le problème d'avoir peu de ressources CPU et de nombreuses tâches. Ainsi, vous créez des threads ou des chemins d'exécution indépendants à travers du code afin de partager du temps sur la ressource rare. Jusqu'à récemment, la concurrence a dominé la discussion en raison de la disponibilité du CPU.

Parallélisme résout le problème de trouver suffisamment de tâches et des tâches (qui peuvent être divisées correctement) et de la distribution sur les ressources CPU abondantes. Le parallélisme a toujours existé, bien sûr, mais il prend de l'importance parce que les processeurs multi-noyaux sont si bon marché.

22
répondu JP Alioto 2009-06-26 17:36:19

exemple Simple:

Concurrent est:" deux files d'attente accéder à un guichet automatique "

Parallèle est: "Deux files d'attente et les deux machines ATM"

21
répondu Saurabh Pakhare 2015-01-28 03:29:43

imaginez apprendre un nouveau langage de programmation en regardant un tutoriel vidéo. Vous devez mettre en pause la vidéo, appliquer ce qui a été dit dans le code puis continuer à regarder. c'est de la concurrence.

Maintenant, vous êtes un programmeur professionnel. Et vous aimez écouter de la musique calme tout en codant. C'est du parallélisme.

de Profiter de.

11
répondu Ramy Mohamed 2017-01-17 20:22:18

pensez-y comme des files d'attente de service où le serveur ne peut servir que la première tâche dans une file d'attente.

1 Serveur , 1 file d'attente (avec 5 tâches) -> pas de concurrence, pas de parallélisme (une seule tâche est en cours de révision jusqu'à son achèvement, la prochaine tâche dans la file d'attente doit attendre jusqu'à ce que la tâche soit terminée et il n'y a pas d'autre serveur pour la servir)

1 Serveur, 2 files d'attente différentes ou plus (avec 5 jobs par file d'attente) - > concurrence (puisque le serveur partage du temps avec tous les premiers emplois dans les files d'attente, égaux ou pondérés) , toujours pas de parallélisme car à tout moment, il y a un seul emploi en cours de révision.

2 serveurs ou plus, une file d'attente -> parallélisme ( 2 tâches effectuées au même instant) mais pas de concurrence ( le serveur ne partage pas le temps, la 3e tâche doit attendre que l'un des serveurs soit terminé.)

2 serveurs ou plus, 2 files d'attente différentes ou plus - > concurrence et parallélisme

En d'autres termes, la concurrence, c'est partager le temps pour accomplir un travail, il peut prendre le même temps pour accomplir son travail, mais au moins il commence tôt. Chose importante , les emplois peuvent être coupées en petits emplois, ce qui permet l'entrelacement.

le parallélisme est atteint avec juste plus de CPU, serveurs, personnes etc qui fonctionnent en parallèle.

gardez à l'esprit, si les ressources sont partagées, le parallélisme pur ne peut pas être atteint, mais c'est là où la concurrence aurait le meilleur utilisation pratique, occuper un autre emploi qui n'a pas besoin de cette ressource.

8
répondu Rahul 2013-09-10 21:03:03

simultanéité = > lorsque plusieurs tâches sont effectuées pendant des périodes de chevauchement avec des ressources partagées (ce qui maximise potentiellement l'utilisation des ressources).

parallèle = > lorsqu'une seule tâche est divisée en plusieurs sous-tâches indépendantes simples qui peuvent être exécutées simultanément.

7
répondu MBK 2017-12-24 22:04:20

je vais vous donner une réponse qui contredit un peu certaines des réponses populaires ici. À mon avis, la concurrence est un terme général qui comprend le parallélisme. simultanéité s'applique à toute situation où des tâches ou des unités de travail distinctes se chevauchent dans le temps. parallélisme s'applique plus spécifiquement aux situations où des unités de travail distinctes sont évaluées/exécutées au même moment physique. La raison d'être du parallélisme est d'accélérer logiciel qui peut bénéficier de multiples ressources de calcul. L'autre grand concept qui s'inscrit dans la concurrence est l'interactivité. Interactivité s'applique lorsque le chevauchement des tâches est observable de l'extérieur. La raison d'être de l'interactivité est de rendre le logiciel sensible aux entités du monde réel comme les utilisateurs, les pairs réseau, les périphériques matériels, etc.

le parallélisme et l'interactivité sont presque entièrement indépendants dimension de la concurrence. Pour un projet en particulier, les développeurs pourraient se soucient soit, les deux ou aucun des deux. Ils ont tendance à se confondre, notamment parce que l'abomination que sont les fils donne une primitive raisonnablement commode pour faire les deux.

un peu plus de détails sur le parallélisme :

Le parallélisme

existe à de très petites échelles (par exemple, le parallélisme au niveau de l'instruction dans les processeurs), à des échelles moyennes (par exemple, les processeurs multicores) et à grande échelle (p. ex., grappes de calcul haute performance). La pression exercée sur les développeurs de logiciels pour qu'ils exposent davantage le parallélisme au niveau du thread a augmenté ces dernières années, en raison de la croissance des processeurs multicore. Le parallélisme est intimement lié à la notion de dépendance . Les dépendances limitent la mesure dans laquelle le parallélisme peut être atteint; deux tâches ne peuvent pas être exécutées en parallèle si l'une dépend de l'autre (en ignorant les spéculations).

il y a beaucoup de modèles et de cadres que les programmeurs utilisent pour exprimer le parallélisme: pipelines, pools de tâches, opérations d'agrégation sur les structures de données ("réseaux parallèles").

un peu plus de détails sur l'interactivité :

la façon la plus élémentaire et la plus courante de faire de l'interactivité est avec les événements (c.-à-d. une boucle d'événements et des gestionnaires/callbacks). Pour les tâches simples les événements sont grands. Essayer de faire des tâches plus complexes, avec des événements obtient dans la pile ripping(A. K. A. callback hell; A. K. A. inversion de contrôle). Quand vous en avez marre des événements, vous pouvez essayer des choses plus exotiques comme les générateurs, les coroutines (A. K. A. Async / Wait), ou des fils coopératifs.

pour l'amour du logiciel fiable, s'il vous plaît n'utilisez pas de threads si ce que vous cherchez est l'interactivité.

Curmudgeonliness

Je n'aime pas la concurrence de Rob Pike "ce n'est pas du parallélisme, c'est mieux" slogan. La simultanéité n'est ni meilleure ni pire que le parallélisme. La simultanéité inclut l'interactivité qui ne peut pas être comparée d'une manière meilleure/pire avec le parallélisme. C'est comme dire "le flux de contrôle est meilleur que les données".

6
répondu Ben Ylvisaker 2014-03-26 20:33:29

en électronique en série et en parallèle représentent un type de topologie statique, déterminant le comportement réel du circuit. Lorsqu'il n'y a pas de simultanéité, le parallélisme est déterministe .

pour décrire la dynamique, phénomènes liés au temps , nous utilisons les Termes séquentiel et concurrent . Par exemple, un certain le résultat peut être obtenu au moyen d'une certaine séquence de tâches (p. ex. recette.) Lorsque nous parlons avec quelqu'un, nous produisons une séquence de mots. Cependant, en réalité, de nombreux autres processus se produisent dans le même moment, et donc, d'accord le résultat d'une action. Si beaucoup de personnes parlent en même temps, concurrente des pourparlers peuvent interférer avec notre séquence, mais les résultats de cette intervention ne sont pas connus à l'avance. La concordance introduit l'indétermination .

la caractérisation séquentielle/parallèle et séquentielle/concurrente est orthogonale. La communication numérique en est un exemple. Dans un adaptateur de série , un message numérique est temporairement (i.e. séquentiellement ) distribué le long de la même ligne de communication (par ex. un fil). Dans un adaptateur parallèle , celui-ci est également divisé sur des lignes de communication parallèles (par ex. beaucoup de fils), puis reconstruit sur l'extrémité de réception.

représentons un jeu, avec 9 enfants. Si nous débarrasser d'eux comme une chaîne, donner un message à la première et le recevoir à la fin, nous aurions une communication série. Plus de mots composent le message, consistant en une séquence d'unités de communication.

I like ice-cream so much. > X > X > X > X > X > X > X > X > X > ....

C'est un processus séquentiel reproduit sur un série de l'infrastructure .

maintenant, donnons l'image de diviser les enfants en groupes de 3. Nous diviser la phrase en trois parties, la première pour l'enfant de la ligne à notre gauche, la seconde à la ligne de centre de l'enfant, etc.

I like ice-cream so much. > I like    > X > X > X > .... > ....
                          > ice-cream > X > X > X > ....
                          > so much   > X > X > X > ....

il s'agit d'un processus séquentiel reproduit sur une infrastructure parallèle (encore partiellement sérialisé bien que).

dans les deux cas, en supposant qu'il y ait un parfait communication entre les enfants, le résultat est déterminé à l'avance.

S'il y a d'autres personnes qui parlent au premier enfant en même temps que vous, alors nous aurons processus simultanés . Nous ne savons pas quel processus sera considéré par l'infrastructure, de sorte que le résultat final est non déterminé à l'avance.

5
répondu s1l3n0 2013-04-27 09:17:02

la simultanéité est la forme généralisée du parallélisme. Par exemple, un programme parallèle peut également être appelé simultanées mais l'inverse n'est pas vrai.

  1. l'exécution simultanée est possible sur un seul processeur (threads multiples, gérés par scheduler ou thread-pool) "

  2. l'exécution en parallèle n'est pas possible sur un processeur unique mais sur plusieurs processeurs. (Un procédé par processeur)

  3. le calcul distribué est également un sujet connexe et il peut aussi être appelé calcul simultané, mais l'inverse n'est pas vrai, comme le parallélisme.

pour plus de détails lire ce document de recherche les Concepts de la Programmation Simultanée

4
répondu 2015-06-23 17:33:18

j'aime beaucoup Paul Boucher réponse à cette question (il est l'auteur de Sept Simultanéité des Modèles à Sept Semaines ):

bien qu'ils soient souvent confus, le parallélisme et la concurrence sont des choses différentes. la concurrence est un aspect du domaine de problèmes - votre le code doit gérer plusieurs simultanée ou quasi simultanée) les événements . le parallélisme, par contre, est un aspect de la solution domaine - vous voulez faire courir votre programme plus vite par le traitement les différentes parties du problème en parallèle. certaines approches sont applicable à la concurrence, certains au parallélisme, et certains aux deux. Comprendre qui vous êtes confronté avec et choisir le bon outil pour le emploi.

3
répondu dangom 2016-11-02 11:30:35

j'ai vraiment aimé cette représentation graphique à partir d'une autre réponse - je pense qu'elle répond à la question beaucoup mieux que la plupart des réponses ci-dessus

parallélisme vs simultanéité Quand deux threads tournent en parallèle, ils courent tous les deux en même temps. Par exemple, si nous avons deux threads, A et B, alors leur exécution parallèle ressemblerait à ceci:

UC 1: UN ------------------------->

UC 2: B ------------------------->

lorsque deux threads tournent simultanément, leur exécution se chevauche. Le chevauchement peut se produire de deux façons: soit les threads s'exécutent en même temps (c.-à-d. en parallèle, comme ci-dessus), soit leurs exécutions sont intercalées sur le processeur, comme ceci:

UC 1: UN -----------> B ----------> UN -----------> B ---------->

donc, pour nos besoins, le parallélisme peut être considéré comme un cas particulier de concurrence

Source: une Autre réponse ici

Espère que ça aide.

3
répondu HopeKing 2018-07-03 13:14:16

parallélisme est l'exécution simultanée de processus sur un multiple cores per CPU ou multiple CPUs (on a single motherboard) .

Simultanéité est lorsque Parallélisme est réalisé sur une single core CPU à l'aide de algorithmes d'ordonnancement qui divise le CPU du temps (de la tranche de temps). Les procédés sont interleaved .

unités:

  • 1 ou plusieurs cœurs dans un CPU (à peu près tous les processeurs modernes)
  • 1 ou plusieurs CPU sur une carte mère (pensez aux serveurs de la vieille école)
  • 1 programme peut avoir 1 ou plusieurs fils d'exécution
  • 1 processus peut avoir 1 ou plusieurs threads à partir de 1 Programme (par exemple pour l'exécution de la série Fibonacci pour un très grand nombre)
  • 1 programme peut avoir 1 ou plusieurs processus (pensez que chaque fenêtre de navigateur Chrome est un processus)
  • 1 processus est thread(s)+allocated memory by OS (tas, registres, pile, classe la mémoire)
3
répondu nabster 2018-09-24 13:55:47

simultanéité peut impliquer des tâches exécutées simultanément ou non (elles peuvent en effet être exécutées dans des processeurs/noyaux séparés mais elles peuvent aussi être exécutées dans des "tics"). Ce qui est important est que la concurrence se réfère toujours à faire un morceau d'une tâche plus grande . Donc en gros, ça fait partie de quelques calculs. Vous devez être intelligent sur ce que vous pouvez faire simultanément et ce n'est pas pour et comment synchroniser.

parallélisme signifie que vous faites juste certaines choses simultanément. Ils n'ont pas besoin de participer à la résolution d'un problème. Vos threads peuvent, par exemple, résoudre un seul problème chacun. Bien sûr, la synchronisation s'applique aussi, mais d'un point de vue différent.

2
répondu kboom 2017-01-17 17:58:50

parallélisme: Avoir plusieurs threads font des tâches similaires qui sont indépendants les uns des autres en termes de données et de ressources dont ils ont besoin pour le faire. Eg: Google crawler peut générer des milliers de threads et chaque thread peut faire sa tâche indépendamment.

simultanéité: La simultanéité entre en scène lorsque vous avez partagé des données, partagé des ressources entre les threads. Dans un système transactionnel cela signifie que vous devez synchronisez la section critique du code en utilisant des techniques comme les serrures, les sémaphores, etc.

2
répondu Sudip Bhandari 2017-02-20 09:29:16

" simultanéité "est lorsqu'il y a plusieurs choses en cours .

"Parallélisme" est quand simultanées choses progressent en même temps .


exemples de concurrence sans parallélisme:

  • fils multiples sur un seul noyau.
  • plusieurs messages dans une file D'attente de messages Win32.
  • Multiple SqlDataReader s sur une MARS connexion.
  • JavaScript Multiple promesses dans un onglet de navigateur.

notez cependant que la différence entre la simultanéité et le parallélisme est souvent une question de perspective. Les exemples ci-dessus ne sont pas parallèles du point de vue de (effets observables de) l'exécution de votre code. Mais il existe un parallélisme au niveau de l'instruction, même à l'intérieur d'un seul cœur. Il y a des pièces de matériel qui font des choses en parallèle avec le CPU et qui interrompent le CPU quand c'est fait. GPU pourrait dessiner à l'écran pendant que vous window procedure ou event handler est exécuté. Le SGBD pourrait traverser les arbres B pour la prochaine requête pendant que vous êtes encore en train de récupérer les résultats de la précédente. Le navigateur peut être en train de faire la mise en page ou la mise en réseau pendant que votre Promise.resolve() est exécuté. Etc, etc...

Alors voilà aller. Le monde est comme une malpropre, comme toujours ;)

2
répondu Branko Dimitrijevic 2018-04-08 03:25:23

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. Les coûts quantitatifs associés aux programmes concurrents sont généralement à la fois le débit et la latence. Les programmes concurrents sont souvent liés aux IO, mais pas toujours, par exemple les collecteurs de déchets concurrents sont entièrement sur-CPU. L'exemple pédagogique d'un programme concurrent est un web crawler. Ce programme initie demandes de pages web et accepte les réponses en même temps que les résultats des téléchargements deviennent disponibles, accumulant un ensemble de pages qui ont déjà été visitées. Le flux de contrôle est non déterministe parce que les réponses ne sont pas nécessairement reçues dans le même ordre chaque fois que le programme est exécuté. Cette caractéristique peut rendre très difficile le débogage de programmes concurrents. Certaines applications sont essentiellement concurrentes, par exemple, les serveurs web doivent traiter les connexions des clients simultanément. Erlang est peut-être le langage le plus prometteur pour une programmation très simultanée.

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 en rendant le flux de contrôle déterministe. En général, les programmes génèrent des ensembles de tâches enfants qui s'exécutent en parallèle et la tâche parent ne se poursuit qu'une fois que chaque sous-tâche est terminée. Cela rend les programmes parallèles beaucoup plus facile à déboguer. La partie difficile de la programmation parallèle est l'optimisation des performances en ce qui concerne des questions telles que la granularité et la communication. Ce dernier problème se pose encore dans le contexte des multicores, car il y a un coût considérable associé au transfert de données d'un cache à un autre. Denses matrix-matrix multiplie est un exemple pédagogique de programmation parallèle et il peut être résolu efficacement en utilisant l'algorithme divide-and-conquer de Straasen et en attaquant les sous-problèmes en parallèle. Cilk est peut-être le langage le plus prometteur pour la programmation parallèle haute performance sur les ordinateurs à mémoire partagée (y compris multicores).

copié de ma réponse: https://stackoverflow.com/a/3982782

2
répondu Jon Harrop 2018-07-06 01:26:29

Super, laissez-moi prendre un scénario pour montrer ce que je comprends. supposons qu'il y ait 3 enfants nommés: A, B, C. A et b parler, c écouter. Pour A et B, ils sont parallèles: A: je suis A. B: je suis B.

mais pour C, son cerveau doit prendre le processus concurrent pour écouter A et B, il peut: Je suis un B.

1
répondu mannnnerd 2014-02-17 02:42:23

simultanéité simple signifie que plusieurs tâches sont exécutées (non nécessaires en parallèle). Par exemple assumer nous avons 3 tâches à tout moment de temps: plus d'un peut être en cours d'exécution ou peut être en cours d'exécution au même moment.

le parallélisme signifie qu'ils fonctionnent littéralement en parallèle. Donc, dans ce cas, les trois doivent courir en même temps.

0
répondu i_am_zero 2014-12-15 11:53:15

le Brochet de la notion de "simultanéité" est intentionnel de la conception et de la mise en œuvre de la décision. Une conception de programme capable de concurrencer peut ou non présenter un "parallélisme" comportemental; cela dépend de l'environnement d'exécution.

vous ne voulez pas que le parallélisme soit exposé par un programme qui n'a pas été conçu pour la concurrence. :- ) Mais dans la mesure où il s'agit d'un gain net pour les facteurs pertinents (consommation d'énergie, performance, etc.), vous voulez un design maximum-simultané de sorte que le système hôte peut paralléliser son exécution lorsque cela est possible.

le langage de programmation Go de Pike illustre cela à l'extrême: ses fonctions sont toutes des threads qui peuvent fonctionner correctement en même temps, c'est-à-dire qu'appeler une fonction crée toujours un thread qui fonctionnera en parallèle avec l'appelant si le système en est capable. Une application avec des centaines ou même des milliers de fils est parfaitement ordinaire dans son monde. (Je ne suis pas expert en Go, c'est juste mon point de vue.)

0
répondu bgat 2015-07-10 14:37:39

explication de cette source m'a été utile:

concurrence est liée à la façon dont une application gère les tâches multiples it fonctionne sur. Une demande peut traiter une tâche à la fois (séquentielle) ou de travailler sur plusieurs tâches en même temps (simultanément.)

parallélisme d'autre part, est liée à la façon dont une application poignées de chaque tâche individuelle. Une demande peut traiter tâche en série du début à la fin, ou de diviser la tâche en sous-tâches qui peut être complété en parallèle.

comme vous pouvez le voir, une application peut être concurrente, mais pas parallèle. Cela signifie qu'il ne traite plus d'une tâche à la fois, mais les tâches ne sont pas décomposées en sous-tâches.

une application peut aussi être parallèle mais non concurrente. Cela signifie que l'application ne fonctionne que sur une seule tâche à la fois, et cette tâche est décomposé en sous-tâches pouvant être traitées en parallèle.

de plus, une demande ne peut être ni concurrente ni parallèle. Cela signifie qu'il fonctionne sur une seule tâche à la fois, et la tâche est jamais décomposé en sous-tâches pour une exécution parallèle.

enfin, une application peut aussi être à la fois concurrente et parallèle, en qu'il fonctionne à la fois sur des tâches multiples en même temps, et casse aussi chaque tâche en sous-tâches en sous-tâches pour une exécution parallèle. Cependant, certains de les avantages de la concurrence et parallélisme peut être perdu dans ce scénario, car les CPU de l'ordinateur sont déjà assez occupés avec soit la concurrence, soit le parallélisme. La combinaison peut conduire à seulement un petit gain de performance ou même une perte de performance.

0
répondu Boolean_Type 2017-08-19 11:37:09

la façon la plus simple et la plus élégante de comprendre les deux à mon avis est celle-ci. La simultanéité permet l'entrelacement de l'exécution et peut donc donner l'illusion du parallélisme. Cela signifie qu'un système concurrent peut exécuter votre vidéo Youtube à vos côtés en écrivant un document dans Word, par exemple. L'OS sous-jacent, étant un système concurrent, permet à ces tâches d'interférer leur exécution. Parce que les ordinateurs exécutent les instructions si rapidement, cela donne l'apparence de faire deux choses à la fois.

Parallélisme est quand de telles choses vraiment sont en parallèle. Dans l'exemple ci-dessus, vous pouvez trouver que le code de traitement vidéo est exécuté sur un seul noyau, et que L'application Word est en cours d'exécution sur un autre. Notez que cela signifie qu'un programme concurrent peut aussi être en parallèle! La structuration de votre application avec des threads et des processus permet à votre programme d'exploiter le matériel sous-jacent et fait en parallèle.

pourquoi tout ne serait-il pas parallèle alors? L'une des raisons est que la concurrence est une façon de structurer programmes et est une décision de conception pour faciliter la séparation des préoccupations, alors que le parallélisme est souvent utilisé au nom de la performance. Une autre est que certaines choses ne peuvent pas être faites en parallèle. Un exemple de ceci serait l'ajout de deux choses à l'arrière d'une file d'attente, vous ne pouvez pas insérer les deux en même temps. Quelque chose doit passer en premier, et l'autre derrière elle, sinon vous gâcher la file d'attente. Bien que nous puissions interférer une telle exécution (et donc nous obtenons une file d'attente concurrente), vous ne pouvez pas l'avoir parallèle.

Espérons que cette aide!

0
répondu Daniel Soutar 2018-04-17 00:54:22

(je suis surpris qu'une question aussi fondamentale ne soit pas résolue correctement et correctement depuis des années...)

bref, la simultanéité et le parallélisme sont des propriétés de computing .

à la différence, voici l'explication de Robert Harper :

la première chose à comprendre est le parallélisme n'a rien à voir avec la concurrence . La concurrence porte sur la composition non déterministe des programmes (ou de leurs composantes). Le parallélisme concerne efficacité asymptotique de programmes avec comportement déterministe . La concurrence, c'est Gérer l'ingérable: les événements arrivent pour des raisons indépendantes de notre volonté, et nous devons y répondre. Un utilisateur clique sur la souris, la fenêtre gestionnaire doit répondre, même si l'affichage est exigeant de l'attention. De telles situations sont intrinsèquement non déterministes, mais nous employons aussi le pro forma non-déterminisme dans un contexte déterministe en prétendant que les composants signalent les événements dans un ordre arbitraire, et que nous devons y répondre au fur et à mesure qu'ils se produisent. La composition non déterministe est une idée puissante de structuration de programme. Le parallélisme, d'un autre côté, est tout au sujet des dépendances parmi les sous-calculs d'un calcul déterministe. Le résultat n'est pas dans le doute, mais il existe de nombreux moyens d'y parvenir, certaines sont plus efficaces que d'autres. Nous souhaitons exploiter ces possibilités à notre avantage.

ils peuvent être des sortes de propriétés orthogonales dans les programmes. Lire ce billet de blog pour des illustrations supplémentaires. Et celui-ci discuté un peu plus sur la différence au sujet des composants dans programmation , comme les fils.

noter que le filetage ou le multitâche sont tous des implémentations de l'informatique servant des buts plus concrets. Elles peuvent être liées au parallélisme et à la concurrence, mais pas de façon essentielle. Ce ne sont donc pas de bonnes entrées pour commencer l'explication.

un autre point fort: le" temps " (physique) n'a presque rien à voir avec les propriétés discutées ici. Le temps n'est qu'une façon d'implémenter la mesure pour montrer la signification des propriétés, mais loin de l'essence. Penser deux fois le rôle du "temps" dans complexité du temps - qui est plus ou moins similaire, même la mesure est souvent plus importante dans ce cas.

0
répondu FrankHB 2018-08-09 05:09:39

juste en consultant le dictionnaire, vous pouvez voir que concurrent (du latin) signifie Courir Ensemble, convergent, d'accord; ergo il y a un besoin de synchroniser parce qu'il y a concurrence sur les mêmes ressources. Parallèle (du grec) signifie en double sur le côté; ergo faire la même chose en même temps.

-4
répondu rocket441 2015-12-19 02:30:42