Ordonnancement préemptif vs coopératif • Time slicing • Fonctionnalités de distribution et coordination • Bénéfices • Utilisation des ressources • Réactivité • Couts • Complexité de conception et débugging • Ressources par thread et context switching Modèle multi-threads @fbeaufume
: • Nom • Priorité : 1 à 10 • Daemon ou pas • Etat : NEW, RUNNABLE, BLOCKED, WAITING, etc. • Pile d'appel • Exemple : • Mémoire partagée suivant le Java Memory Model Java 1.0 @fbeaufume
Model • Interactions entre les threads et la mémoire • "Happens before" • Volatile : • R et W en mémoire principale plutôt que sur cache CPU • Rend R et W 64 bits (long et double) atomique • Mais pas un incrément • Permet de la synchronisation simple Java 5 @fbeaufume
sous-taches et recompose le résultat final • Fonctionne par work-stealing • Etendre RecursiveAction (si pas de résultat) ou RecursiveTask (si résultat) Java 7 - Fork/join (1/2) @fbeaufume
commun : • Par system property : • -Djava.util.concurrent.ForkJoinPool.common.parallelism=7 • Sinon Runtime.getRuntime().availableProcessors() - 1 • Le thread courant aussi est utilisé • Ou dans un ForkJoinPool custom Java 8 - Parallel streams (1/2) @fbeaufume
de collection : ArrayList plutôt que LinkedList • Nature du traitement • Taille de "N*Q" (nb d'élément * cout par élément) • Nombre de cœurs, il faut > 1 • Mesurer les deux • Par défaut utilisent tous le ForkJoinPool commun • Attention aux lambdas stateful Java 8 - Parallel streams (2/2) @fbeaufume
Solutions Java SE fonctionnent mais… • … utiliser les threads du framework • Contextes de sécurité et de transaction • Modèles de composants (Servlet, EJB, Spring, etc) : • Cycle de vie et scope : request, session, etc. • Modèle de concurrence, voir de locking Principes généraux @fbeaufume
toutes les requêtes, donc thread-safe • Spring et CDI • Concurrence manuelle via solutions de Java SE • EJB session singleton • @ConcurrencyManagement : container ou bean • @AccessTimeout • @Lock : read ou write • Autres Concurrence des composants @fbeaufume
• Simplicité • Inconvénients • Contention • Pour transactions courtes Locking pessimiste par la base R W t "select … for update" "update …" JPA 2 Hibernate
date) • Pour fort taux de conflits • Bénéfices • Fonctions avancées (monitoring, historisation, etc) • Inconvénients • Mode édition dans l'UI • Gérer l'expiration des locks • Plus d'accès à la base • Contention Locking pessimiste applicatif R W t JPA Hibernate Lock Unlock