dimanche 6 mai 2012

JAVA 7 - Fork/Join framework

En parcourant le net, je me suis rendu compte que peu de pages, françaises, étaient présentes pour décrire de façon simple et concise le framework Fork/Join apporté par Java 7. Le but de ce billet sera d'en donner les éléments clés ainsi que les pointeurs sur les pages qui m'ont aidé à me faire une rapide compréhension de ce nouveau standard.

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

Aucun commentaire:

Enregistrer un commentaire