Le principe général
C'est une mise en application du vieil adage "diviser pour mieux régner" ; sauf que dans notre cas c'est pour la bonne cause.
Désormais, quand on commence à coder une boucle qui risque d'être longue car consommatrice de CPU ou lorsque l'on commence à implémenter un algorithme dont l'exécution sera longue en terme de temps CPU ; JAVA met à notre disposition un lot de classes permettant de coder facilement l'exécution en parallèle de certains traitements mais aussi, et surtout, aidant différentes unités d'exécution (ou Tache) à se synchroniser les unes par rapport aux autres.
Mise en application
C'est au développeur de découper son calcul/traitement en unités d'exécution (ou tache) plus petites, jusqu'à obtenir une taille qu'il considérera comme suffisamment petite pour pouvoir être exécutée sans être divisée. Ce découpage peut être fait de manière récursive. Chaque tâche devra dériver de la classe "ForkJoinTask". En fait, le framework fournit deux classes spécialisant la class ForkJoinClass :- RecursiveTask<T> : pour coder une tâche retournant une valeur de Type T
- RecursiveAction : pour coder une tâche dont on n'attend pas de valeur résultat, mais devant réaliser une action.
Une fois ce travail de découpage effectué, la tâche principale ( ou point d'entrée ) est passé à un executor spécialisé ( class ForkJoinPool ).
Les liens
- http://www.oracle.com/technetwork/articles/java/fork-join-422606.html : cette page vous montrera comment réaliser l'équivalent du 'grep' unix en utilisant le framework for/join. Je ne met pas d'exemple de code dans mon article car je trouve ceux de cette page très pédagogiques.
- http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html : un aperçu beaucoup plus basique de la techno
- http://www.programmez.com/tutoriels.php?tutoriel=90 : en français, mais un peu moins agréable à lire que le premier des liens ...
Aucun commentaire:
Enregistrer un commentaire