Sobes.tech
Middle

Quelle est la différence entre 'concurrence' et 'parallélisme' dans le contexte de la multithreading?

sobes.tech IA

Réponse de l'IA

La concurrence (concurrency) est la capacité d'un système à traiter plusieurs tâches en même temps. Ces tâches peuvent s'exécuter sur un seul cœur de processeur, en se basculant entre elles dans le temps (principe de partage du temps). Cela ne signifie pas nécessairement que les tâches s'exécutent à un même instant physique.

Le parallélisme (parallelism) est l'exécution réelle et simultanée de plusieurs tâches à un même instant physique, en utilisant plusieurs cœurs de processeur ou plusieurs processeurs.

Différence principale :

  • Concurrence : Gestion de plusieurs tâches qui peuvent ou non s'exécuter simultanément. Focus sur la structuration du programme pour gérer plusieurs threads d'exécution.
  • Parallélisme : Exécution simultanée physique de plusieurs tâches. Focus sur l'utilisation des ressources matérielles disponibles pour accélérer l'exécution.
// Exemple de concurrence (sans garantie d'exécution parallèle)
public class ConcurrentExample {
    public static void main(String[] args) {
        Runnable task1 = () -> System.out.println("Tâche 1 démarrée sur le thread : " + Thread.currentThread().getName());
        Runnable task2 = () -> System.out.println("Tâche 2 démarrée sur le thread : " + Thread.currentThread().getName());

        new Thread(task1).start(); // Peut s'exécuter sur un seul cœur
        new Thread(task2).start(); // Peut s'exécuter sur un seul cœur
    }
}
// Exemple de parallélisme (nécessite un processeur multi-cœurs)
import java.util.List;
import java.util.Arrays;

public class ParallelExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        numbers.parallelStream() // Utilise ForkJoinPool pour exécution parallèle
               .forEach(number -> System.out.println("Traitement de " + number + " sur le thread : " + Thread.currentThread().getName()));
    }
}
Aspect Concurrence Parallélisme
Objectif Gestion de plusieurs tâches Accélération de l'exécution
Exigences Plusieurs tâches/threads Processeur multi-cœurs/multiple processeurs
Exécution Alternance d'exécution Exécution simultanée
Fréquence Peut être atteinte sur un seul cœur Nécessite plusieurs cœurs/processeurs
Exemple Multitâche sur un système mono-cœur Traitement parallèle d'un grand tableau de données