Le parallélisme implique la concurrence, mais pas l'inverse, non?

15

Je lis souvent que le parallélisme et la concurrence sont des choses différentes. Très souvent, les répondeurs / commentateurs vont jusqu'à écrire que ce sont deux choses entièrement différentes. Pourtant, à mon avis, ils sont liés, mais j'aimerais avoir des éclaircissements à ce sujet.

Par exemple, si je suis sur un processeur multicœur et que je parviens à diviser le calcul en x calculs plus petits (par exemple, en utilisant fork / join) chacun s'exécutant dans son propre thread, j'aurai un programme qui effectue tous les deux un calcul parallèle (car soi-disant à tout moment plusieurs threads vont s'exécuter sur plusieurs cœurs) et étant simultanés à droite?

Bien que si j'utilise simplement, disons, Java et que je traite des événements d'interface utilisateur et des repeints sur le thread de répartition des événements et que j'exécute le seul thread que j'ai créé moi-même, j'aurai un programme qui est simultané (EDT + GC thread + mon thread principal etc.) mais pas parallèle.

Je voudrais savoir si je comprends bien et si le parallélisme (sur un système "simple mais multi-cœurs") implique toujours une concurrence ou non?

De plus, les programmes multi-threads s'exécutent-ils sur un processeur multi-cœurs mais où les différents threads effectuent des calculs totalement différents considérés comme utilisant le "parallélisme"?

Cedric Martin
la source

Réponses:

13

Selon Wikipedia :

Le calcul parallèle est une forme de calcul dans laquelle de nombreux calculs sont effectués simultanément, fonctionnant sur le principe que les gros problèmes peuvent souvent être divisés en plus petits, qui sont ensuite résolus simultanément ("en parallèle").

Autrement dit, le parallélisme implique toujours la concurrence.

De plus, les programmes multi-threads s'exécutent-ils sur un processeur multi-cœurs mais où les différents threads effectuent des calculs totalement différents considérés comme utilisant le "parallélisme"?

Non. L'essence du parallélisme est qu'un grand problème est divisé en plus petits afin que les plus petits morceaux puissent être résolus simultanément. Les pièces sont mutuellement indépendantes (dans une certaine mesure au moins), mais elles font toujours partie du problème plus large, qui est maintenant résolu en parallèle.

L'essence de la concurrence est qu'un certain nombre de threads (ou de processus ou d'ordinateurs) font quelque chose simultanément , pouvant (mais pas nécessairement) interagir d'une certaine manière. Wikipédia à nouveau :

La concurrence est une propriété des systèmes dans lesquels plusieurs calculs s'exécutent simultanément et interagissent potentiellement les uns avec les autres.

Joonas Pulakka
la source
4
Super article. Le parallélisme est un sous-ensemble de la concurrence.
3
Désolé, mais cette réponse est incorrecte. Vous pouvez certainement avoir un parallélisme sans concurrence (par exemple, un parallélisme au niveau du bit) et en fait, les deux sont des concepts distincts. La concurrence consiste à composer des unités d'exécution indépendantes tandis que le parallélisme concerne l'exécution simultanée de calculs potentiellement associés.
Kai Sellgren du
@KaiSellgren: Veuillez citer une source pour appuyer votre déclaration.
Joonas Pulakka
Le premier wikiquote est tout simplement faux. Heureusement, il a été corrigé il y a quelque temps et maintenant il indique correctement que le parallélisme ne repose pas sur la concurrence.
Kai Sellgren
En effet, c'est ce que dit actuellement le wiki ( il est possible d'avoir du parallélisme sans concurrence (comme le parallélisme au niveau du bit) ). Mais je ne comprends pas du tout ce point; le parallélisme au niveau du bit n'est-il pas la chose la plus concurrente imaginable - plus d'opérations effectuées avec moins d'instructions, alors certaines de ces opérations ne sont-elles pas exécutées dans la même instruction, c'est-à-dire simultanément, c'est-à-dire simultanément?
Joonas Pulakka
3

Le code peut être simultané, mais pas parallèle.

Imaginez plusieurs threads s'exécutant sur une seule machine. Cette machine monocœur ne traitera qu'un seul thread à la fois, il n'y aura donc pas de parallélisme des opérations. Mais pour chaque thread, grâce à la façon dont le système d'exploitation gère plusieurs threads, chaque thread doit supposer que tous les autres threads s'exécutent en même temps.

Euphorique
la source
0

Le parallélisme signifie simplement faire plusieurs tâches simultanément; d'autre part, la simultanéité est la capacité du noyau à effectuer de nombreuses tâches en basculant constamment entre de nombreux processus.

Afin de réaliser le parallélisme, il est important que le système ait de nombreux cœurs seulement alors le parallélisme peut être atteint efficacement. Et il y a beaucoup de succès sur les performances et beaucoup de frais généraux sont encourus si le parallélisme est essayé sur une machine monocœur.

Par exemple, un système antérieur n'avait qu'un seul cœur et les ordonnanceurs CPU donneraient une illusion de parallélisme en basculant constamment entre les processus, permettant à chaque processus de progresser.

user196279
la source