If you can't read please download the document
Upload
zenika
View
6.835
Download
2
Embed Size (px)
DESCRIPTION
Présentation de Fork/Join dans Java 7 par Olivier Croisier, Benoît Nouyrigat et Lucien Pereira, de Zenika. Cette présentation a été donnée lors d'une fête en l'honneur de la sortie de Java 7, co-organisée par Xebia et Zenika (cf. http://sortiejava7.eventbrite.com ).
Citation preview
2. Zenika
3. 3 domaines d'expertise centrs sur la plate-forme Java.
Centre de formation au coeur de Paris. Spring, Hibernate, Maven, Eclipse RCP, BIRT, GWT, etc...
Audits de code et d'architecture, prconisations et mise en place de frameworks, choix et valuation d'outils et de frameworks, etc...
Approche pragmatique de nos architectes - nous ralisons ce que nous prconisons. Dlgation de projets au forfait. 4. Speakers
5. Plan
6. Le framework Fork / Join 7. Use-cases et bonnes pratiques 8. Dmos 9. Conclusion 10. Introduction Java 7
11. Premire version dirige par Oracle 12. Contenu:
13. NIO2 14. Fork / Join 15. InvokeDynamic 16. Autres En attendant Java 8... 17. Introduction Pourquoi Fork / Join
Il faut en tirer parti
18. Algorithmes parallles Design patterns parallles
Frameworks
19. Introduction Principe du Fork / Join
20. Cette tche
21. Cre une nouvelle tche par sous-problme 22. Les soumet au pool en appelant fork() 23. Attend leur compltion en appelant join() 24. Fusionne les rsultats partiels 25. Renvoie le rsultat final 26. Le framework Fork / Join ForkJoinPool
27. Famille desExecutors T invoke(task) void execute(task) Future submit(task) < interface> Executor < interface> ExecutorService ForkJoinPool 28. Le framework Fork / Join ForkJoinPool
29. Par dfautnbThreads= nombre de processeurs 30. ThreadFactory et UncaughtExceptionHandler rglables Utilisation private static ForkJoinPool pool =new ForkJoinPool() ; public void sort(long[] array) { pool.invoke (new ArraySortTask(...)); } 31. Le framework Fork / Join ForkJoinPool TASK 32. Le framework Fork / Join ForkJoinTask
compute(), fork(), join() isDone(), get() ... < interface> Future < abstract> ForkJoinTask RecursiveTask RecursiveAction 33. Le framework Fork / Join ForkJoinTask
34. Modlise un traitement rcursif qui renvoie une valeur
RecursiveAction
35. Modlise un traitement qui ne renvoie pas de valeur 36. Peut nanmoins modifier les donnes passes en paramtre
37. Le framework Fork / Join RecursiveTask
fork fork fork join join join fork join fork join fork join +1 +1 +1 +1 +1 +1 1 2 3 4 +1 2 3 4 5 1 2 2 3 3 4 4 5 1 2 2 3 3 4 4 5 38. Le framework Fork / Join RecursiveTask - Mauvais exemple public class FileSizeTask extends RecursiveTask { private File root; public FileSizeTask(File root) { this.root = root; } protected Long compute() { long size = 0; File[] files = root.listFiles(); for (File f : files) { if (f.isDirectory()) { ForkJoinTask subtask =new FileSizeTask(f).fork() ; size +=subtask.join() ; }else { size += f.length(); } }return size; } } 39. Le framework Fork / Join RecursiveTask - Bon exemple public class FileSizeTask extends RecursiveTask { private File root; public FileSizeTask(File root) { this.root = root; } protected Long compute() { List>subTasks= new ArrayList(); long size = 0; File[] files = root.listFiles(); for(File f : files) { if (f.isDirectory()) { subTasks.add(new FileSizeTask(f).fork()) ; }else { size += f.length(); } } for (ForkJoinTask subTask : subTasks) { size += subTask.join(); } return size; } } // 40. Le framework Fork / Join RecursiveAction
fork join fork join fork fork join join join fork join fork +1 +1 1 2 3 4 2 3 4 5 1 2 3 4 +1 1 2 3 4 2 2 3 4 +1 1 2 3 4 1 3 3 4 +1 1 2 3 4 1 2 4 4 +1 1 2 3 4 1 2 3 5 2 3 3 4 +1 1 2 3 4 1 2 4 5 41. Use-cases et bonnes pratiques Use-cases
42. Lorsque le traitement est dcomposable ensous-tchesindpendantes
La dcomposition en sous-tches peut tre:
43. dynamique: dcouvrir une arborescence de fichiers
44. Use-cases et bonnes pratiques Bonnes pratiques
45. Trouver la bonne granularit Attention la consommation mmoire
46. Dcouverte dynamique des sous-tches Attention la complexit
47. Maintenance 48. Use-cases et bonnes pratiques Optimisations
49. Threads >= Degr de paralllisme
Tches
Optimiser la granularit l'aide des statistiques du pool
50. Possibilit d'optimisation dynamique 51. Dmos! 52. Rfrences
53. Etude de Doug Lea http://gee.cs.oswego.edu/dl/papers/fj.pdf 54. Article de Julien Ponge http://www.oracle.com/technetwork/articles/java/fork-join-422606.html 55. Article de Jos Paumard http://blog.paumard.org/2011/07/05/java-7-fork-join/ 56. Questions ?