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 |