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"?