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"?
la source
Réponses:
Selon Wikipedia :
Autrement dit, le parallélisme implique toujours la concurrence.
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 source
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.
la source
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.
la source