Parallélisme en Java - partie1
Dans un contexte ou l’industrie et les applications scientifiques ont besoin d’une vitesse de calcul de plus en plus grande, la croissance de la vitesse des processeurs ne suffit pas et elle est assez couteuse.
La solution est l’utilisation de plusieurs processeurs en même temps, un algorithme est donc divisé en tâches qui peuvent être exécutées simultanément sur des processeurs différents. Ceci va permettre de réduire le temps de résolution d’un problème.
Le langage java propose des mécanismes pour implémenter le parallélisme, mais il ne permet pas la gestion des machines multiprocesseurs. La programmation concurrente peut se faire via le concept de thread, cet outil permet de simuler une exécution parallèle des tâches. En réalité il s’agit d’un pseudo-parallélisme car les threads ne sont pas exécutés en même temps, chacun d’eux occupe le processeur pendant un temps définit puis il cède sa place à un autre.
En ce qui concerne la programmation distribuée Java dispose de l’API RMI, cette dernière permet de distribuer les classes d’une application sur différentes machines. Cependant avec ce concept on ne peut pas réaliser des applications distribuées et parallèles, car la machine virtuelle java ne permet pas au programmeur d’envoyer via le réseau des threads. Pour se faire on a besoin de mettre en place une extension de la JVM qui va permettre de manipuler les threads.
L’utilisation des threads est assez complexe est nécessite une grande connaissance de la machine virtuelle java, des conflits peuvent être causés, cependant il existe des outils pour les éviter comme les verrous et la synchronisation. Il faut savoir que même si le programmeur n’utilise pas le concept de thread la machine virtuelle le fait de façon implicite, elle dispose d’un ordonnanceur qui va attribuer le processeur à tour de rôle simulant ainsi une exécution simultanée.
Comment peut-on donc utiliser ses différents concepts ? Comment construire des applications parallèles ? Et quelle est la différence entre la programmation concurrente, la programmation distribuée, et la programmation parallèle ?