Java. Programmation. concurrente en. Référence. Brian Goetz. avec Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes et Doug Lea

Dimension: px
Commencer à balayer dès la page:

Download "Java. Programmation. concurrente en. Référence. Brian Goetz. avec Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes et Doug Lea"

Transcription

1 Référence Programmation concurrente en Java Brian Goetz avec Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes et Doug Lea Réseaux et télécom Programmation Génie logiciel Sécurité Système d exploitation

2 Programmation concurrente en Java Brian Goetz Avec la collaboration de : Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes et Doug Lea Traduction : Éric Jacoboni Relecture technique : Éric Hébert, Architecte Java JEE Nicolas de Loof, Architecte Java

3 Pearson Education France a apporté le plus grand soin à la réalisation de ce livre afin de vous fournir une information complète et fiable. Cependant, Pearson Education France n assume de responsabilités, ni pour son utilisation, ni pour les contrefaçons de brevets ou atteintes aux droits de tierces personnes qui pourraient résulter de cette utilisation. Les exemples ou les programmes présents dans cet ouvrage sont fournis pour illustrer les descriptions théoriques. Ils ne sont en aucun cas destinés à une utilisation commerciale ou professionnelle. Pearson Education France ne pourra en aucun cas être tenu pour responsable des préjudices ou dommages de quelque nature que ce soit pouvant résulter de l utilisation de ces exemples ou programmes. Tous les noms de produits ou marques cités dans ce livre sont des marques déposées par leurs propriétaires respectifs. Publié par Pearson Education France 47 bis, rue des Vinaigriers PARIS Tél. : Mise en pages : TyPAO ISBN : Copyright 2009 Pearson Education France Tous droits réservés Titre original : Java Concurrency in Practice Traduit de l américain par Éric Jacoboni ISBN original : Copyright 2006 by Pearson Education, Inc All rights reserved Édition originale publiée par Addison-Wesley Professional, 800 East 96th Street, Indianapolis, Indiana USA Aucune représentation ou reproduction, même partielle, autre que celles prévues à l article L et 3 a) du code de la propriété intellectuelle ne peut être faite sans l autorisation expresse de Pearson Education France ou, le cas échéant, sans le respect des modalités prévues à l article L dudit code. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc.

4 Table des matières Table des listings... XI Préface... XIX Préface à l édition française... XXI Présentation de l ouvrage... XXIII Structure de l ouvrage... XXIII Exemples de code... XXV Remerciements... XXVI 1 Introduction Bref historique de la programmation concurrente Avantages des threads Exploitation de plusieurs processeurs Simplicité de la modélisation Gestion simplifiée des événements asynchrones Interfaces utilisateur plus réactives Risques des threads Risques concernant la "thread safety" Risques sur la vivacité Risques sur les performances Les threads sont partout Partie I Les bases 2 Thread safety Qu est-ce que la thread safety? Exemple : une servlet sans état Atomicité Situations de compétition... 21

5 IV Table des matières Exemple : situations de compétition dans une initialisation paresseuse Actions composées Verrous Verrous internes Réentrance Protection de l état avec les verrous Vivacité et performances Partage des objets Visibilité Données obsolètes Opérations 64 bits non atomiques Verrous et visibilité Variables volatiles Publication et fuite Pratiques de construction sûres Confinement des objets Confinement ad hoc Confinement dans la pile ThreadLocal Objets non modifiables Champs final Exemple : utilisation de volatile pour publier des objets non modifiables Publication sûre Publication incorrecte : quand les bons objets deviennent mauvais Objets non modifiables et initialisation sûre Idiomes de publication correcte Objets non modifiables dans les faits Objets modifiables Partage d objets de façon sûre Composition d objets Conception d une classe thread-safe Exigences de synchronisation Opérations dépendantes de l état Appartenance de l état Confinement des instances Le patron moniteur de Java Exemple : gestion d une flotte de véhicules... 66

6 Table des matières V 4.3 Délégation de la thread safety Exemple : gestionnaire de véhicules utilisant la délégation Variables d état indépendantes Échecs de la délégation Publication des variables d état sous-jacentes Exemple : gestionnaire de véhicules publiant son état Ajout de fonctionnalités à des classes thread-safe existantes Verrouillage côté client Composition Documentation des politiques de synchronisation Interprétation des documentations vagues Briques de base Collections synchronisées Problèmes avec les collections synchronisées Itérateurs et ConcurrentModificationException Itérateurs cachés Collections concurrentes ConcurrentHashMap Opérations atomiques supplémentaires sur les Map CopyOnWriteArrayList Files bloquantes et patron producteur-consommateur Exemple : indexation des disques Confinement en série Classe Deque et vol de tâches Méthodes bloquantes et interruptions Synchronisateurs Loquets FutureTask Sémaphores Barrières Construction d un cache efficace et adaptable Résumé de la première partie Partie II Structuration des applications concurrentes 6 Exécution des tâches Exécution des tâches dans les threads Exécution séquentielle des tâches

7 VI Table des matières Création explicite de threads pour les tâches Inconvénients d une création illimitée de threads Le framework Executor Exemple : serveur web utilisant Executor Politiques d exécution Pools de threads Cycle de vie d un Executor Tâches différées et périodiques Trouver un parallélisme exploitable Exemple : rendu séquentiel d une page Tâches partielles : Callable et Future Exemple : affichage d une page avec Future Limitations du parallélisme de tâches hétérogènes CompletionService : quand Executor rencontre BlockingQueue Exemple : affichage d une page avec CompletionService Imposer des délais aux tâches Exemple : portail de réservations Résumé Annulation et arrêt Annulation des tâches Interruption Politiques d interruption Répondre aux interruptions Exemple : exécution avec délai Annulation avec Future Méthodes bloquantes non interruptibles Encapsulation d une annulation non standard avec newtaskfor() Arrêt d un service reposant sur des threads Exemple : service de journalisation Méthodes d arrêt de ExecutorService Pilules empoisonnées Exemple : un service d exécution éphémère Limitations de shutdownnow() Gestion de la fin anormale d un thread Gestionnaires d exceptions non capturées Arrêt de la JVM Méthodes d interception d un ordre d arrêt Threads démons Finaliseurs Résumé

8 Table des matières VII 8 Pools de threads Couplage implicite entre les tâches et les politiques d exécution Interblocage par famine de thread Tâches longues Taille des pools de threads Configuration de ThreadPoolExecutor Création et suppression de threads Gestion des tâches en attente Politiques de saturation Fabriques de threads Personnalisation de ThreadPoolExecutor après sa construction Extension de ThreadPoolExecutor Exemple : ajout de statistiques à un pool de threads Parallélisation des algorithmes récursifs Exemple : un framework de jeu de réflexion Résumé Applications graphiques Pourquoi les interfaces graphiques sont-elles monothreads? Traitement séquentiel des événements Confinement aux threads avec Swing Tâches courtes de l interface graphique Tâches longues de l interface graphique Annulation Indication de progression et de terminaison SwingWorker Modèles de données partagées Modèles de données thread-safe Modèles de données séparés Autres formes de sous-systèmes monothreads Résumé Partie III Vivacité, performances et tests 10 Éviter les problèmes de vivacité Interblocages (deadlock) Interblocages liés à l ordre du verrouillage Interblocages dynamiques liés à l ordre du verrouillage Interblocages entre objets coopératifs

9 VIII Table des matières Appels ouverts Interblocages liés aux ressources Éviter et diagnostiquer les interblocages Tentatives de verrouillage avec expiration Analyse des interblocages avec les traces des threads Autres problèmes de vivacité Famine Faible réactivité Livelock Résumé Performances et adaptabilité Penser aux performances Performances et adaptabilité Compromis sur l évaluation des performances La loi d Amdahl Exemple : sérialisation cachée dans les frameworks Application qualitative de la loi d Amdahl Coûts liés aux threads Changements de contexte Synchronisation de la mémoire Blocages Réduction de la compétition pour les verrous Réduction de la portée des verrous ("entrer, sortir") Réduire la granularité du verrouillage Découpage du verrouillage Éviter les points chauds Alternatives aux verrous exclusifs Surveillance de l utilisation du processeur Dire non aux pools d objets Exemple : comparaison des performances des Map Réduction du surcoût des changements de contexte Résumé Tests des programmes concurrents Tests de la justesse Tests unitaires de base Tests des opérations bloquantes Test de la sécurité vis-à-vis des threads Test de la gestion des ressources Utilisation des fonctions de rappel Production d entrelacements supplémentaires

10 Table des matières IX 12.2 Tests de performances Extension de PutTakeTest pour ajouter un timing Comparaison de plusieurs algorithmes Mesure de la réactivité Pièges des tests de performance Ramasse-miettes Compilation dynamique Échantillonnage irréaliste de portions de code Degrés de compétition irréalistes Élimination du code mort Approches de tests complémentaires Relecture du code Outils d analyse statiques Techniques de tests orientées aspects Profileurs et outils de surveillance Résumé Partie IV Sujets avancés 13 Verrous explicites Lock et ReentrantLock Prise de verrou scrutable et avec délai Prise de verrou interruptible Verrouillage non structuré en bloc Remarques sur les performances Équité synchronized vs. ReentrantLock Verrous en lecture-écriture Résumé Construction de synchronisateurs personnalisés Gestion de la dépendance par rapport à l état Exemple : propagation de l échec de la précondition aux appelants Exemple : blocage brutal par essai et mise en sommeil Les files d attente de condition Utilisation des files d attente de condition Le prédicat de condition Réveil trop précoce

11 X Table des matières Signaux manqués Notification Exemple : une classe "porte d entrée" Problèmes de safety des sous-classes Encapsulation des files d attente de condition Protocoles d entrée et de sortie Objets conditions explicites Anatomie d un synchronisateur AbstractQueuedSynchronizer Un loquet simple AQS dans les classes de java.util.concurrent ReentrantLock Semaphore et CountDownLatch FutureTask ReentrantReadWriteLock Résumé Variables atomiques et synchronisation non bloquante Inconvénients du verrouillage Support matériel de la concurrence L instruction Compare-and-swap Compteur non bloquant Support de CAS dans la JVM Classes de variables atomiques Variables atomiques comme "volatiles améliorées" Comparaison des performances des verrous et des variables atomiques Algorithmes non bloquants Pile non bloquante File chaînée non bloquante Modificateurs atomiques de champs Le problème ABA Résumé Le modèle mémoire de Java Qu est-ce qu un modèle mémoire et pourquoi en a-t-on besoin? Modèles mémoire des plates-formes Réorganisation Le modèle mémoire de Java en moins de cinq cents mots Tirer parti de la synchronisation

12 Table des matières XI 16.2 Publication Publication incorrecte Publication correcte Idiomes de publication correcte Verrouillage contrôlé deux fois Initialisation sûre Résumé Annexe Annotations pour la concurrence A.1 Annotations de classes A.2 Annotations de champs et de méthodes Bibliographie Index

13

14 Table des listings Listing 1 : Mauvaise façon de trier une liste. Ne le faites pas.... Listing 2 : Méthode peu optimale de trier une liste.... XX Listing 1.1 : Générateur de séquence non thread-safe Listing 1.2 : Générateur de séquence thread-safe Listing 2.1 : Une servlet sans état Listing 2.2 : Servlet comptant le nombre de requêtes sans la synchronisation nécessaire. Ne le faites pas Listing 2.3 : Situation de compétition dans une initialisation paresseuse. Ne le faites pas. 22 Listing 2.4 : Servlet comptant les requêtes avec AtomicLong Listing 2.5 : Servlet tentant de mettre en cache son dernier résultat sans l atomicité adéquate. Ne le faites pas Listing 2.6 : Servlet mettant en cache le dernier résultat, mais avec une très mauvaise concurrence. Ne le faites pas Listing 2.7 : Ce code se bloquerait si les verrous internes n étaient pas réentrants Listing 2.8 : Servlet mettant en cache la dernière requête et son résultat Listing 3.1 : Partage de données sans synchronisation. Ne le faites pas Listing 3.2 : Conteneur non thread-safe pour un entier modifiable Listing 3.3 : Conteneur thread-safe pour un entier modifiable Listing 3.4 : Compter les moutons Listing 3.5 : Publication d un objet Listing 3.6 : L état modifiable interne à la classe peut s échapper. Ne le faites pas Listing 3.7 : Permet implicitement à la référence this de s échapper. Ne le faites pas Listing 3.8 : Utilisation d une méthode fabrique pour empêcher la référence this de s échapper au cours de la construction de l objet Listing 3.9 : Confinement des variables locales, de types primitifs ou de types références. 47 Listing 3.10 : Utilisation de ThreadLocal pour garantir le confinement au thread Listing 3.11 : Classe non modifiable construite à partir d objets modifiables sous-jacents. 50 Listing 3.12 : Conteneur non modifiable pour mettre en cache un nombre et ses facteurs. 52 Listing 3.13 : Mise en cache du dernier résultat à l aide d une référence volatile vers un objet conteneur non modifiable Listing 3.14 : Publication d un objet sans synchronisation appropriée. Ne le faites pas Listing 3.15 : Classe risquant un problème si elle n est pas correctement publiée XX

15 XIV Table des listings Listing 4.1 : Compteur mono-thread utilisant le patron moniteur de Java Listing 4.2 : Utilisation du confinement pour assurer la thread safety Listing 4.3 : Protection de l état à l aide d un verrou privé Listing 4.4 : Implémentation du gestionnaire de véhicule reposant sur un moniteur Listing 4.5 : Classe Point modifiable ressemblant à java.awt.point Listing 4.6 : Classe Point non modifiable utilisée par DelegatingVehicleTracker Listing 4.7 : Délégation de la thread safety à un objet ConcurrentHashMap Listing 4.8 : Renvoi d une copie statique de l ensemble des emplacements au lieu d une copie "vivante" Listing 4.9 : Délégation de la thread à plusieurs variables d état sous-jacentes Listing 4.10 : Classe pour des intervalles numériques, qui ne protège pas suffisamment ses invariants. Ne le faites pas Listing 4.11 : Classe point modifiable et thread-safe Listing 4.12 : Gestionnaire de véhicule qui publie en toute sécurité son état interne Listing 4.13 : Extension de Vector pour disposer d une méthode ajouter-si-absent Listing 4.14 : Tentative non thread-safe d implémenter ajouter-si-absent. Ne le faites pas. 76 Listing 4.15 : Implémentation d ajouter-si-absent avec un verrouillage côté client Listing 4.16 : Implémentation d ajouter-si-absent en utilisant la composition Listing 5.1 : Actions composées sur un Vector pouvant produire des résultats inattendus. 84 Listing 5.2 : Actions composées sur Vector utilisant un verrouillage côté client Listing 5.3 : Itération pouvant déclencher ArrayIndexOutOfBoundsException Listing 5.4 : Itération avec un verrouillage côté client Listing 5.5 : Parcours d un objet List avec un Iterator Listing 5.6 : Itération cachée dans la concaténation des chaînes. Ne le faites pas Listing 5.7 : Interface ConcurrentMap Listing 5.8 : Tâches producteur et consommateur dans une application d indexation des fichiers Listing 5.9 : Lancement de l indexation Listing 5.10 : Restauration de l état d interruption afin de ne pas absorber l interruption. 99 Listing 5.11 : Utilisation de la classe CountDownLatch pour lancer et stopper des threads et mesurer le temps d exécution Listing 5.12 : Utilisation de FutureTask pour précharger des données dont on aura besoin plus tard Listing 5.13 : Coercition d un objet Throwable non contrôlé en RuntimeException Listing 5.14 : Utilisation d un Semaphore pour borner une collection Listing 5.15 : Coordination des calculs avec CyclicBarrier pour une simulation de cellules. 106 Listing 5.16 : Première tentative de cache, utilisant HashMap et la synchronisation Listing 5.17 : Remplacement de HashMap par ConcurrentHashMap Listing 5.18 : Enveloppe de mémoïsation utilisant FutureTask

16 Table des listings XV Listing 5.19 : Implémentation finale de Memoizer Listing 5.20 : Servlet de factorisation mettant en cache ses résultats avec Memoizer Listing 6.1 : Serveur web séquentiel Listing 6.2 : Serveur web lançant un thread par requête Listing 6.3 : Interface Executor Listing 6.4 : Serveur web utilisant un pool de threads Listing 6.5 : Executor lançant un nouveau thread pour chaque tâche Listing 6.6 : Executor exécutant les tâches de façon synchrone dans le thread appelant. 123 Listing 6.7 : Méthodes de ExecutorService pour le cycle de vie Listing 6.8 : Serveur web avec cycle de vie Listing 6.9 : Classe illustrant le comportement confus de Timer Listing 6.10 : Affichage séquentiel des éléments d une page Listing 6.11 : Interfaces Callable et Future Listing 6.12 : Implémentation par défaut de newtaskfor() dans ThreadPoolExecutor. 131 Listing 6.13 : Attente du téléchargement d image avec Future Listing 6.14 : La classe QueueingFuture utilisée par ExecutorCompletionService Listing 6.15 : Utilisation de CompletionService pour afficher les éléments de la page dès qu ils sont disponibles Listing 6.16 : Récupération d une publicité dans un délai imparti Listing 6.17 : Obtention de tarifs dans un délai imparti Listing 7.1 : Utilisation d un champ volatile pour stocker l état d annulation Listing 7.2 : Génération de nombres premiers pendant une seconde Listing 7.3 : Annulation non fiable pouvant bloquer les producteurs. Ne le faites pas Listing 7.4 : Méthodes d interruption de Thread Listing 7.5 : Utilisation d une interruption pour l annulation Listing 7.6 : Propagation de InterruptedException aux appelants Listing 7.7 : Tâche non annulable qui restaure l interruption avant de se terminer Listing 7.8 : Planification d une interruption sur un thread emprunté. Ne le faites pas Listing 7.9 : Interruption d une tâche dans un thread dédié Listing 7.10 : Annulation d une tâche avec Future Listing 7.11 : Encapsulation des annulations non standard dans un thread par redéfinition de interrupt() Listing 7.12 : Encapsulation des annulations non standard avec newtaskfor() Listing 7.13 : Service de journalisation producteur-consommateur sans support de l arrêt. 156 Listing 7.14 : Moyen non fiable d ajouter l arrêt au service de journalisation Listing 7.15 : Ajout d une annulation fiable à LogWriter Listing 7.16 : Service de journalisation utilisant un ExecutorService Listing 7.17 : Arrêt d un service avec une pilule empoisonnée

17 XVI Table des listings Listing 7.18 : Thread producteur pour IndexingService Listing 7.19 : Thread consommateur pour IndexingService Listing 7.20 : Utilisation d un Executor privé dont la durée de vie est limitée à un appel de méthode Listing 7.21 : ExecutorService mémorisant les tâches annulées après l arrêt Listing 7.22 : Utilisation de TrackingExecutorService pour mémoriser les tâches non terminées afin de les relancer plus tard Listing 7.23 : Structure typique d un thread d un pool de threads Listing 7.24 : Interface UncaughtExceptionHandler Listing 7.25 : UncaughtExceptionHandler, qui inscrit l exception dans le journal Listing 7.26 : Enregistrement d un hook d arrêt pour arrêter le service de journalisation. 167 Listing 8.1 : Interblocage de tâches dans un Executor monothread. Ne le faites pas Listing 8.2 : Constructeur général de ThreadPoolExecutor Listing 8.3 : Création d un pool de threads de taille fixe avec une file bornée et la politique de saturation caller-runs Listing 8.4 : Utilisation d un Semaphore pour ralentir la soumission des tâches Listing 8.5 : Interface ThreadFactory Listing 8.6 : Fabrique de threads personnalisés Listing 8.7 : Classe de base pour les threads personnalisés Listing 8.8 : Modification d un Executor créé avec les méthodes fabriques standard Listing 8.9 : Pool de threads étendu par une journalisation et une mesure du temps Listing 8.10 : Transformation d une exécution séquentielle en exécution parallèle Listing 8.11 : Transformation d une récursion terminale séquentielle en récursion parallèle. 186 Listing 8.12 : Attente des résultats calculés en parallèle Listing 8.13 : Abstraction pour les jeux de type "taquin" Listing 8.14 : Nœud pour le framework de résolution des jeux de réflexion Listing 8.15 : Résolveur séquentiel d un puzzle Listing 8.16 : Version parallèle du résolveur de puzzle Listing 8.17 : Loquet de résultat partiel utilisé par ConcurrentPuzzleSolver Listing 8.18 : Résolveur reconnaissant qu il n y a pas de solution Listing 9.1 : Implémentation de SwingUtilities à l aide d un Executor Listing 9.2 : Executor construit au-dessus de SwingUtilities Listing 9.3 : Écouteur d événement simple Listing 9.4 : Liaison d une tâche longue à un composant visuel Listing 9.5 : Tâche longue avec effet visuel Listing 9.6 : Annulation d une tâche longue Listing 9.7 : Classe de tâche en arrière-plan supportant l annulation, ainsi que la notification de terminaison et de progression

18 Table des listings XVII Listing 9.8 : Utilisation de BackgroundTask pour lancer une tâche longue et annulable. 203 Listing 10.1 : Interblocage simple lié à l ordre du verrouillage. Ne le faites pas Listing 10.2 : Interblocage dynamique lié à l ordre du verrouillage. Ne le faites pas Listing 10.3 : Induire un ordre de verrouillage pour éviter les interblocages Listing 10.4 : Boucle provoquant un interblocage dans une situation normale Listing 10.5 : Interblocage lié à l ordre du verrouillage entre des objets coopératifs. Ne le faites pas Listing 10.6 : Utilisation d appels ouverts pour éviter l interblocage entre des objets coopératifs Listing 10.7 : Portion d une trace de thread après un interblocage Listing 11.1 : Accès séquentiel à une file d attente Listing 11.2 : Synchronisation inutile. Ne le faites pas Listing 11.3 : Candidat à l élision de verrou Listing 11.4 : Détention d un verrou plus longtemps que nécessaire Listing 11.5 : Réduction de la durée du verrouillage Listing 11.6 : Candidat au découpage du verrou Listing 11.7 : Modification de ServerStatus pour utiliser des verrous divisés Listing 11.8 : Hachage utilisant le découpage du verrouillage Listing 12.1 : Tampon borné utilisant la classe Semaphore Listing 12.2 : Tests unitaires de base pour BoundedBuffer Listing 12.3 : Test du blocage et de la réponse à une interruption Listing 12.4 : Générateur de nombre aléatoire de qualité moyenne mais suffisante pour les tests Listing 12.5 : Programme de test producteur-consommateur pour BoundedBuffer Listing 12.6 : Classes producteur et consommateur utilisées dans PutTakeTest Listing 12.7 : Test des fuites de ressources Listing 12.8 : Fabrique de threads pour tester ThreadPoolExecutor Listing 12.9 : Méthode de test pour vérifier l expansion du pool de threads Listing : Utilisation de Thread.yield() pour produire plus d entrelacements Listing : Mesure du temps à l aide d une barrière Listing : Test avec mesure du temps à l aide d une barrière Listing : Programme pilote pour TimedPutTakeTest Listing 13.1 : Interface Lock Listing 13.2 : Protection de l état d un objet avec ReentrantLock Listing 13.3 : Utilisation de trylock() pour éviter les interblocages dus à l ordre des verrouillages Listing 13.4 : Verrouillage avec temps imparti Listing 13.5 : Prise de verrou interruptible

19 XVIII Table des listings Listing 13.6 : Interface ReadWriteLock Listing 13.7 : Enveloppe d un Map avec un verrou de lecture-écriture Listing 14.1 : Structure des actions bloquantes en fonction de l état Listing 14.2 : Classe de base pour les implémentations de tampons bornés Listing 14.3 : Tampon borné qui se dérobe lorsque les préconditions ne sont pas vérifiées. 299 Listing 14.4 : Code client pour l appel de GrumpyBoundedBuffer Listing 14.5 : Tampon borné avec blocage brutal Listing 14.6 : Tampon borné utilisant des files d attente de condition Listing 14.7 : Forme canonique des méthodes dépendantes de l état Listing 14.8 : Utilisation d une notification conditionnelle dans BoundedBuffer.put(). 310 Listing 14.9 : Porte refermable à l aide de wait() et notifyall() Listing : Interface Condition Listing : Tampon borné utilisant des variables conditions explicites Listing : Semaphore implémenté à partir de Lock Listing : Formes canoniques de l acquisition et de la libération avec AQS Listing : Loquet binaire utilisant AbstractQueuedSynchronizer Listing : Implémentation de tryacquire() pour un ReentrantLock non équitable. 321 Listing : Les méthodes tryacquireshared() et tryreleaseshared() de Semaphore Listing 15.1 : Simulation de l opération CAS Listing 15.2 : Compteur non bloquant utilisant l instruction CAS Listing 15.3 : Préservation des invariants multivariables avec CAS Listing 15.4 : Générateur de nombres pseudo-aléatoires avec ReentrantLock Listing 15.5 : Générateur de nombres pseudo-aléatoires avec AtomicInteger Listing 15.6 : Pile non bloquante utilisant l algorithme de Treiber (Treiber, 1986) Listing 15.7 : Insertion dans l algorithme non bloquant de Michael-Scott (Michael et Scott, 1996) Listing 15.8 : Utilisation de modificateurs atomiques de champs dans ConcurrentLinkedQueue Listing 16.1 : Programme mal synchronisé pouvant produire des résultats surprenants. Ne le faites pas Listing 16.2 : Classe interne de FutureTask illustrant une mise à profit de la synchronisation. 351 Listing 16.3 : Initialisation paresseuse incorrecte. Ne le faites pas Listing 16.4 : Initialisation paresseuse thread-safe Listing 16.5 : Initialisation impatiente Listing 16.6 : Idiome de la classe conteneur de l initialisation paresseuse Listing 16.7 : Antipatron du verrouillage vérifié deux fois. Ne le faites pas Listing 16.8 : Initialisation sûre pour les objets non modifiables

20 Préface À l heure où ce livre est écrit, les machines de gamme moyenne utilisent désormais des processeurs multicœurs. En même temps, et ce n est pas une coïncidence, les rapports de bogues signalent de plus en plus de problèmes liés aux threads. Dans un article récent posté sur le site des développeurs de NetBeans, l un des développeurs principaux indique qu une même classe a été corrigée plus de quatorze fois pour remédier à ce genre de problème. Dion Almaer, ancien éditeur de TheServerSide, a récemment écrit dans son blog (après une session de débogage harassante qui a fini par révéler un bogue lié aux threads) que ce type de bogue est si courant dans les programmes Java que ceux-ci ne fonctionnent souvent que "par accident". Le développement, le test et le débogage des programmes multithreads peut se révéler très difficile car, évidemment, les problèmes de concurrence se manifestent de façon imprévisible. Ils apparaissent généralement au pire moment lorsque le programme est en production et doit gérer une lourde charge de travail. L une des difficultés de la programmation concurrente en Java consiste à distinguer la concurrence offerte par la plate-forme et la façon dont les développeurs doivent appréhender cette concurrence dans leurs programmes. Le langage fournit des mécanismes de bas niveau, comme la synchronisation et l attente de conditions, qui doivent être utilisés correctement pour implémenter des protocoles ou des politiques au niveau des applications. Sans ces politiques, il est vraiment très facile de créer des programmes qui se compileront et sembleront fonctionner alors qu ils sont bogués. De nombreux ouvrages excellents consacrés à la programmation concurrente manquent ainsi leur but en se consacrant presque exclusivement aux mécanismes de bas niveau et aux API au lieu de s intéresser aux politiques et aux patrons de conception. Java 5.0 constitue une étape majeure vers le développement d applications concurrentes en Java car il fournit à la fois des composants de haut niveau et des mécanismes de bas niveau supplémentaires facilitant la construction des applications concurrentes à la fois pour les débutants et les experts. Les auteurs sont des membres essentiels du JCP Expert Group 1, qui a créé ces outils ; outre la description de leur comportement et de 1. N.d.T. : JCP signifie Java Community Process. Il s agit d un processus de développement et d amélioration de Java ouvert à toutes les bonnes volontés. Les propositions émises sont appelées JSR (Java Specification Request) et leur mise en place est encadrée par un groupe d experts (Expert Group).

Créer un site e-commerce avec Dreamweaver CS4 et PHP/MySQL

Créer un site e-commerce avec Dreamweaver CS4 et PHP/MySQL Créer un site e-commerce avec Dreamweaver CS4 et PHP/MySQL 4 e édition Pearson Education France a apporté le plus grand soin à la réalisation de ce livre afin de vous fournir une information complète et

Plus en détail

Magento. Pratique du e-commerce avec Magento. Christophe Le Bot avec la contribution technique de Bruno Sebarte

Magento. Pratique du e-commerce avec Magento. Christophe Le Bot avec la contribution technique de Bruno Sebarte Magento Pratique du e-commerce avec Magento Christophe Le Bot avec la contribution technique de Bruno Sebarte Pearson Education France a apporté le plus grand soin à la réalisation de ce livre afin de

Plus en détail

Synchronisation par. Rappels. Plan. Conditions et moniteurs (1/7) Inf 431 Cours 11. jeanjacqueslevy.net

Synchronisation par. Rappels. Plan. Conditions et moniteurs (1/7) Inf 431 Cours 11. jeanjacqueslevy.net Rappels Inf 431 Cours 11 un processus t (Thread) est un programme qui s exécute Synchronisation par mémoire partagée tstart lance l exécution concurrente de la méthode trun de t tinterrupt signale qu on

Plus en détail

CSS. Techniques professionnelles pour une mise en page moderne. Eric A. Meyer. 2011 Pearson Education France CSS Eric A. Meyer

CSS. Techniques professionnelles pour une mise en page moderne. Eric A. Meyer. 2011 Pearson Education France CSS Eric A. Meyer CSS Techniques professionnelles pour une mise en page moderne Eric A. Meyer Pearson Education France a apporté le plus grand soin à la réalisation de ce livre afin de vous fournir une information complète

Plus en détail

Cours de Systèmes d Exploitation

Cours de Systèmes d Exploitation Licence d informatique Synchronisation et Communication inter-processus Hafid Bourzoufi Université de Valenciennes - ISTV Introduction Les processus concurrents s exécutant dans le système d exploitation

Plus en détail

Métriques de performance pour les algorithmes et programmes parallèles

Métriques de performance pour les algorithmes et programmes parallèles Métriques de performance pour les algorithmes et programmes parallèles 11 18 nov. 2002 Cette section est basée tout d abord sur la référence suivante (manuel suggéré mais non obligatoire) : R. Miller and

Plus en détail

Créations graphiques. John McWade Before&After. 2010 Pearson Education France Créations graphiques John McWade

Créations graphiques. John McWade Before&After. 2010 Pearson Education France Créations graphiques John McWade Créations graphiques John McWade Before&After Pearson Education France a apporté le plus grand soin à la réalisation de ce livre afin de vous fournir une information complète et fiable. Cependant, Pearson

Plus en détail

Initiation au HPC - Généralités

Initiation au HPC - Généralités Initiation au HPC - Généralités Éric Ramat et Julien Dehos Université du Littoral Côte d Opale M2 Informatique 2 septembre 2015 Éric Ramat et Julien Dehos Initiation au HPC - Généralités 1/49 Plan du cours

Plus en détail

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation Cycle Ingénierie 2e année SIGL Dernière mise à jour : 19/10/2006 Christophe Porteneuve Threads Principes Cycle de vie Création java.lang.thread

Plus en détail

PLAN. Synchronisation des Processus: Exclusion Mutuelle. Problème de synchronisation: Exemple. Spécification du Problème

PLAN. Synchronisation des Processus: Exclusion Mutuelle. Problème de synchronisation: Exemple. Spécification du Problème PLAN Synchronisation des Processus: Exclusion Mutuelle N.Hameurlain http://www.univ-pau.fr/~hameur Spécification du problème Section Critique () Exclusion Mutuelle Principe Propriétés Réalisation d exclusion

Plus en détail

Exclusion mutuelle Synchronisation avancée. Programmation parallèle et concurrente

Exclusion mutuelle Synchronisation avancée. Programmation parallèle et concurrente Exclusion mutuelle Synchronisation avancée Programmation parallèle et concurrente Problématique Synchronisation = essentielle si utilisation de plusieurs threads Développement d'applications robustes 2

Plus en détail

Introduction : les processus. Introduction : les threads. Plan

Introduction : les processus. Introduction : les threads. Plan IN328 Programmation distribuée avec Java et J2EE 2 - Threads en Java Introduction : les processus Un processus est un ensemble d instructions à exécuter, un espace mémoire réservé et éventuellement d autres

Plus en détail

Projet Active Object

Projet Active Object Projet Active Object TAO Livrable de conception et validation Romain GAIDIER Enseignant : M. Noël PLOUZEAU, ISTIC / IRISA Pierre-François LEFRANC Master 2 Informatique parcours MIAGE Méthodes Informatiques

Plus en détail

Application web pour la coordination de trajets piétons jusqu aux transports en commun

Application web pour la coordination de trajets piétons jusqu aux transports en commun Application web pour la coordination de trajets piétons jusqu aux transports en commun PROJET DE FIN D ETUDES ASR Etudiants : Encadrants : Oumar Sharif DAMBABA Clément BERTHOU Olivier BERGER Christian

Plus en détail

LOG4430 : Architecture et conception avancée

LOG4430 : Architecture et conception avancée LOG4430 : Architecture et conception avancée Abdou Maiga Patrons pour la conception d applications distribuées Département de génie informatique et de génie logiciel École Polytechnique de Montréal Guéhéneuc,

Plus en détail

INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE

INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE I N T E RS Y S T E M S INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE David Kaaret InterSystems Corporation INTERSySTEMS CAChé CoMME ALTERNATIvE AUx BASES de données RéSIdENTES

Plus en détail

Cours Bases de données

Cours Bases de données Informations sur le cours Cours Bases de données 9 (10) séances de 3h Polycopié (Cours + TD/TP) 3 année (MISI) Antoine Cornuéjols www.lri.fr/~antoine antoine.cornuejols@agroparistech.fr Transparents Disponibles

Plus en détail

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011 Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr Université de Provence 9 février 2011 Arnaud Labourel (Université de Provence) Exclusion Mutuelle 9 février 2011 1 / 53 Contexte Epistémologique

Plus en détail

NFP111 Systèmes et Applications Réparties

NFP111 Systèmes et Applications Réparties NFP111 Systèmes et Applications Réparties 1 de 46 NFP111 Systèmes et Applications Réparties Cours 2 - Les appels de procédure distants (Partie 1) Claude Duvallet Université du Havre UFR Sciences et Techniques

Plus en détail

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique Institut Supérieure Aux Etudes Technologiques De Nabeul Département Informatique Support de Programmation Java Préparé par Mlle Imene Sghaier 2006-2007 Chapitre 1 Introduction au langage de programmation

Plus en détail

Évaluation et implémentation des langages

Évaluation et implémentation des langages Évaluation et implémentation des langages Les langages de programmation et le processus de programmation Critères de conception et d évaluation des langages de programmation Les fondations de l implémentation

Plus en détail

Vers un outil d analyse de l empreinte mémoire d un code de calcul scientifique.

Vers un outil d analyse de l empreinte mémoire d un code de calcul scientifique. Vers un outil d analyse de l empreinte mémoire d un code de calcul scientifique. Ameziane NAIT ABDELAZIZ Département informatique, filière PRCD Maître de stage : Bruno LATHUILIERE Tuteur : Brice GOGLIN

Plus en détail

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean. Plan du cours 2 Introduction générale : fondamentaux : les fondamentaux Michel Buffa (buffa@unice.fr), UNSA 2002, modifié par Richard Grin (version 1.1, 21/11/11), avec emprunts aux supports de Maxime

Plus en détail

QUELQUES CONCEPTS INTRODUCTIFS

QUELQUES CONCEPTS INTRODUCTIFS ESIEE Unité d'informatique IN101 Albin Morelle (et Denis Bureau) QUELQUES CONCEPTS INTRODUCTIFS 1- ARCHITECTURE ET FONCTIONNEMENT D UN ORDINATEUR Processeur Mémoire centrale Clavier Unité d échange BUS

Plus en détail

Développement d applications professionnelles avec Android 2

Développement d applications professionnelles avec Android 2 Développement d applications professionnelles avec Android 2 Reto Meier Traduit par Dalil Djidel, avec la contribution technique d Arnaud Farine Pearson Education France a apporté le plus grand soin à

Plus en détail

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran)  Processus = suite d'actions = suite d'états obtenus = trace Processus 1) Contexte 2) Modèles de Notion de Points de vue Modèle fourni par le SX Opérations sur les 3) Gestion des Représentation des Opérations 4) Ordonnancement des Niveaux d ordonnancement Ordonnancement

Plus en détail

L unique SAN industriel proposant un stockage multiniveau automatisé (Automated Tiered Storage)

L unique SAN industriel proposant un stockage multiniveau automatisé (Automated Tiered Storage) Storage Center Baie de stockage STORAGE CENTER Transcende les limites des systèmes de stockage classiques Les fournisseurs de stockage actuels promettent de réduire le temps et les sommes d argent que

Plus en détail

Comment optimiser l utilisation des ressources Cloud et de virtualisation, aujourd hui et demain?

Comment optimiser l utilisation des ressources Cloud et de virtualisation, aujourd hui et demain? DOSSIER SOLUTION Solution CA Virtual Placement and Balancing Comment optimiser l utilisation des ressources Cloud et de virtualisation, aujourd hui et demain? agility made possible La solution automatisée

Plus en détail

Système d exploitation

Système d exploitation Chapitre 2 Système d exploitation 2.1 Définition et rôle Un ordinateur serait bien difficile à utiliser sans interface entre le matériel et l utilisateur. Une machine peut exécuter des programmes, mais

Plus en détail

Systèmes d exploitation Gestion des fichiers. Catalin Dima

Systèmes d exploitation Gestion des fichiers. Catalin Dima Systèmes d exploitation Gestion des fichiers Catalin Dima 1 Problématique Certains processus doivent stocker/avoir accès à une très grande quantité de mémoire Parfois plusieurs ordres de grandeur par rapport

Plus en détail

Démarrer et quitter... 13

Démarrer et quitter... 13 Démarrer et quitter... 13 Astuce 1 - Ouvrir, modifier, ajouter un élément dans le Registre... 14 Astuce 2 - Créer un point de restauration... 18 Astuce 3 - Rétablir un point de restauration... 21 Astuce

Plus en détail

Patrons de Conception (Design Patterns)

Patrons de Conception (Design Patterns) Patrons de Conception (Design Patterns) Introduction 1 Motivation Il est difficile de développer des logiciels efficaces, robustes, extensibles et réutilisables Il est essentiel de comprendre les techniques

Plus en détail

Préface. 2013 Pearson France Développement d'applications Windows 8 avec C# et XAML Jeremy Likness

Préface. 2013 Pearson France Développement d'applications Windows 8 avec C# et XAML Jeremy Likness Les prémices d informations sur Windows 8 sont apparus début 2011. Les spéculations sont allées bon train sur Internet lorsque les développeurs ont commencé à s interroger sur la nouvelle plateforme. Les

Plus en détail

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007 NFP 121 Java et les Threads Présentation : Thierry Escalarasse Mai 2007 Plan du cour Présentation de la notion de Threads La classe Thread L interface Runnable Les états d un thread La Synchronisation

Plus en détail

Informatique industrielle A7-19571 Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Informatique industrielle A7-19571 Systèmes temps-réel J.F.Peyre. Partie I : Introduction Informatique industrielle A7-19571 Systèmes temps-réel J.F.Peyre Partie I : Introduction Plan de la première partie Quelques définitions Caractéristiques communes des applications temps-réel Exemples d

Plus en détail

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Anne Tasso Java Le livre de premier langage 10 e édition Avec 109 exercices corrigés Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Table des matières Avant-propos Organisation de l ouvrage..............................

Plus en détail

Deuxième partie. Protocoles d exclusion mutuelle. Plan. Interférences et isolation. Isolation Protocoles d exclusion mutuelle

Deuxième partie. Protocoles d exclusion mutuelle. Plan. Interférences et isolation. Isolation Protocoles d exclusion mutuelle Plan Deuxième partie 1 2 Primitives de gestion des activités 2 / 26 4 / 26 Interférences et isolation Contenu de cette partie di cultés résultant d accès concurrents à un objet partagé mise en œuvre de

Plus en détail

10 tâches d administration simplifiées grâce à Windows Server 2008 R2. 1. Migration des systèmes virtuels sans interruption de service

10 tâches d administration simplifiées grâce à Windows Server 2008 R2. 1. Migration des systèmes virtuels sans interruption de service 10 tâches d administration simplifiées grâce à Windows Server 2008 R2 Faire plus avec moins. C est l obsession depuis plusieurs années de tous les administrateurs de serveurs mais cette quête prend encore

Plus en détail

Tutorat C/Unix : Un Rapido Client/Serveur

Tutorat C/Unix : Un Rapido Client/Serveur Tutorat C/Unix : Un Rapido Client/Serveur Nouredine Melab 1 Description générale du projet 1.1 Objectif L'objectif du projet est de concevoir et de réaliser un jeu de hasard dénommé Rapido. Un serveur

Plus en détail

Not For Public Diffusion

Not For Public Diffusion LoriotPro V4 Extended Edition Module de corrélation d événements de type down/up (BETA) Lecointe Ludovic Copyright 2005-2006 LUTEUS SARL. All rights reserved. This documentation is copyrighted by LUTEUS

Plus en détail

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores INTRODUCTION AUX SYSTEMES D EXPLOITATION TD2 Exclusion mutuelle / Sémaphores Exclusion mutuelle / Sémaphores - 0.1 - S O M M A I R E 1. GENERALITES SUR LES SEMAPHORES... 1 1.1. PRESENTATION... 1 1.2. UN

Plus en détail

Figure 1. Structure répartie

Figure 1. Structure répartie Chapitre I: Applications Réparties et Middleware 1. Définition d une application répartie Une application répartie est constituée d un ensemble de processus (d objets, d agents, d acteurs) s exécutant

Plus en détail

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object) Quelques patterns pour la persistance des objets avec DAO Ce cours présente des modèles de conception utilisés pour effectuer la persistance des objets Université de Nice Sophia-Antipolis Version 1.4 30/8/07

Plus en détail

Entraînement au concours ACM-ICPC

Entraînement au concours ACM-ICPC Entraînement au concours ACM-ICPC Concours ACM-ICPC : format et stratégies Page 1 / 16 Plan Présentation Stratégies de base Page 2 / 16 Qu est-ce que c est? ACM-ICPC : International Collegiate Programming

Plus en détail

Problèmes liés à la concurrence

Problèmes liés à la concurrence ENS Cachan Problématique Difficile de gérer la concurrence : Pas toujours facile d avoir des fonctions réentrantes. Risque de race condition : ex : x :=x+1 x :=x+1 On voudrait des blocs d instructions

Plus en détail

Vulgarisation Java EE Java EE, c est quoi?

Vulgarisation Java EE Java EE, c est quoi? Paris, le 1 Février 2012 Vulgarisation Java EE Java EE, c est quoi? Sommaire Qu est ce que Java? Types d applications Java Environnements Java Versions de Java Java EE, c est quoi finalement? Standards

Plus en détail

Tolérance aux pannes

Tolérance aux pannes Tolérance aux pannes Arnaud Labourel Université de Provence 15 mars 2012 Arnaud Labourel (Université de Provence) Tolérance aux pannes 15 mars 2012 1 / 55 Présentation Tolérances aux pannes Pannes Définition

Plus en détail

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués International Journal of Engineering Research and Development e-issn: 2278-067X, p-issn: 2278-800X, www.ijerd.com Volume 7, Issue 5 (June 2013), PP.99-103 Solution A La Gestion Des Objets Java Pour Des

Plus en détail

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration Julien MATHEVET Alexandre BOISSY GSID 4 Rapport Load Balancing et migration Printemps 2001 SOMMAIRE INTRODUCTION... 3 SYNTHESE CONCERNANT LE LOAD BALANCING ET LA MIGRATION... 4 POURQUOI FAIRE DU LOAD BALANCING?...

Plus en détail

Bien architecturer une application REST

Bien architecturer une application REST Olivier Gutknecht Bien architecturer une application REST Avec la contribution de Jean Zundel Ce livre traite exactement du sujet suivant : comment faire pour que les services web et les programmes qui

Plus en détail

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java Info0604 Programmation multi-threadée Cours 5 Programmation multi-threadée en Java Pierre Delisle Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique 18 février 2015 Plan

Plus en détail

Systèmes d exploitation. Introduction. (Operating Systems) http://www.sir.blois.univ-tours.fr/ mirian/

Systèmes d exploitation. Introduction. (Operating Systems) http://www.sir.blois.univ-tours.fr/ mirian/ Systèmes d exploitation (Operating Systems) Introduction SITE : http://www.sir.blois.univ-tours.fr/ mirian/ Systèmes d exploitation - Mírian Halfeld-Ferrari p. 1/2 Qu est-ce qu un SE? Ensemble de logiciels

Plus en détail

5 Moniteurs. Slide 1. Caractéristique majeure d un programme avec moniteurs = Composé de deux sortes de modules/processus: Slide 2

5 Moniteurs. Slide 1. Caractéristique majeure d un programme avec moniteurs = Composé de deux sortes de modules/processus: Slide 2 5 Moniteurs Motivation = les sémaphores peuvent être utilisés pour résoudre à peu près n importe quel problème d exclusion mutuelle ou synchronisation... mais, les sémaphores possèdent certains désavantages:

Plus en détail

Introduction. Python?

Introduction. Python? 1 Introduction Python - why settle for snake oil when you can have the whole snake? «Python - Pourquoi se contenter d huile de serpent quand on peut avoir le serpent tout entier?» Mark Jackson En guise

Plus en détail

Introduction à la programmation concurrente

Introduction à la programmation concurrente Introduction à la programmation concurrente Exclusion mutuelle par attente active Yann Thoma Reconfigurable and Embedded Digital Systems Institute Haute Ecole d Ingénierie et de Gestion du Canton de Vaud

Plus en détail

Java. Java. Le livrede. Avec 80 exercices corrigés. Avec 80 exercices corrigés. Le livre. Anne Tasso. 5 e édition. Un best-seller qui a déjà conquis

Java. Java. Le livrede. Avec 80 exercices corrigés. Avec 80 exercices corrigés. Le livre. Anne Tasso. 5 e édition. Un best-seller qui a déjà conquis Anne Tasso Un best-seller qui a déjà conquis des milliers d'étudiants! Java Le livre Java Le livrede de premier premier langage langage Avec 80 exercices corrigés Avec 80 exercices corrigés 5 e édition

Plus en détail

CH.3 SYSTÈMES D'EXPLOITATION

CH.3 SYSTÈMES D'EXPLOITATION CH.3 SYSTÈMES D'EXPLOITATION 3.1 Un historique 3.2 Une vue générale 3.3 Les principaux aspects Info S4 ch3 1 3.1 Un historique Quatre générations. Préhistoire 1944 1950 ENIAC (1944) militaire : 20000 tubes,

Plus en détail

Le gestionnaire des tâches

Le gestionnaire des tâches 43-45 rue CHARLOT 75003 PARIS. Benoît HAMET FRANCE : benoit.hamet@hametbenoit.fr.st Le gestionnaire des tâches......... Le gestionnaire des tâches Sommaire Sommaire...2 Introduction...3 Les onglets et

Plus en détail

Solaris pour la base de donnés Oracle

<Insert Picture Here> Solaris pour la base de donnés Oracle Solaris pour la base de donnés Oracle Alain Chéreau Oracle Solution Center Agenda Compilateurs Mémoire pour la SGA Parallélisme RAC Flash Cache Compilateurs

Plus en détail

Architecture Logicielle

Architecture Logicielle Architecture Logicielle Chapitre 3: UML pour la description et la documentation d une architecture logicielle Année universitaire 2013/2014 Semestre 1 Rappel L architecture d un programme ou d un système

Plus en détail

Vérifier la qualité de vos applications logicielle de manière continue

Vérifier la qualité de vos applications logicielle de manière continue IBM Software Group Vérifier la qualité de vos applications logicielle de manière continue Arnaud Bouzy Kamel Moulaoui 2004 IBM Corporation Agenda Analyse de code Test Fonctionnel Test de Performance Questions

Plus en détail

REALISATION d'un. ORDONNANCEUR à ECHEANCES

REALISATION d'un. ORDONNANCEUR à ECHEANCES REALISATION d'un ORDONNANCEUR à ECHEANCES I- PRÉSENTATION... 3 II. DESCRIPTION DU NOYAU ORIGINEL... 4 II.1- ARCHITECTURE... 4 II.2 - SERVICES... 4 III. IMPLÉMENTATION DE L'ORDONNANCEUR À ÉCHÉANCES... 6

Plus en détail

Conception des systèmes répartis

Conception des systèmes répartis Conception des systèmes répartis Principes et concepts Gérard Padiou Département Informatique et Mathématiques appliquées ENSEEIHT Octobre 2012 Gérard Padiou Conception des systèmes répartis 1 / 37 plan

Plus en détail

Synchro et Threads Java TM

Synchro et Threads Java TM Synchro et Threads Java TM NICOD JEAN-MARC Master 2 Informatique Université de Franche-Comté UFR des Sciences et Techniques septembre 2008 NICOD JEAN-MARC Synchro et Threads avec Java TM 1 / 32 Sommaire

Plus en détail

Stratégie intelligente de reprise d activité pour les postes de travail : postes de travail sous forme de service (DaaS) LIVRE BLANC

Stratégie intelligente de reprise d activité pour les postes de travail : postes de travail sous forme de service (DaaS) LIVRE BLANC Stratégie intelligente de reprise d activité pour les postes de travail : postes de travail sous forme de service (DaaS) LIVRE BLANC Sommaire Résumé analytique.... 3 L improbable n a jamais été aussi probable....

Plus en détail

Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP)

Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP) Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP) Loris Marchal, Guillaume Melquion, Frédéric Tronel 21 juin 2011 Remarques générales à propos de l épreuve Organisation

Plus en détail

GESTION DU RÉSEAU DANS LES ENVIRONNEMENTS DISTRIBUÉS. Défis et Opportunités pour l Entreprise

GESTION DU RÉSEAU DANS LES ENVIRONNEMENTS DISTRIBUÉS. Défis et Opportunités pour l Entreprise GESTION DU RÉSEAU DANS LES ENVIRONNEMENTS DISTRIBUÉS Défis et Opportunités pour l Entreprise I. INTRODUCTION Le développement des réseaux ne se limite pas à leur taille et à leurs capacités, il concerne

Plus en détail

Master UPMC Sciences et technologies, mention informatique Spécialité Systèmes et Applications

Master UPMC Sciences et technologies, mention informatique Spécialité Systèmes et Applications Master UPMC Sciences et technologies, mention informatique Spécialité Systèmes et Applications Réparties Réalisation Assistée d Applications Réparties Projet - écriture d un générateur de code Encadreur

Plus en détail

Projet gestion d'objets dupliqués

Projet gestion d'objets dupliqués Projet gestion d'objets dupliqués Daniel Hagimont Daniel.Hagimont@enseeiht.fr 1 Projet Service de gestion d'objets dupliqués Mise en cohérence lors de la prise d'un verrou sur un objet Pas de verrous imbriqués

Plus en détail

Présentation du PL/SQL

Présentation du PL/SQL I Présentation du PL/ Copyright Oracle Corporation, 1998. All rights reserved. Objectifs du Cours A la fin de ce chapitre, vous saurez : Décrire l intéret du PL/ Décrire l utilisation du PL/ pour le développeur

Plus en détail

Quel SGBDR pour VFP?

Quel SGBDR pour VFP? D. Peralta le 4 mars 2008 Rencontres AtoutFox 2007/2008 Quel SGBDR pour VFP? Lors des précédentes rencontres, nous avons écrit des articles sur l utilisation des SGBDR avec VFP. Nous avons vu les différentes

Plus en détail

Concevoir des applications Web avec UML

Concevoir des applications Web avec UML Concevoir des applications Web avec UML Jim Conallen Éditions Eyrolles ISBN : 2-212-09172-9 2000 1 Introduction Objectifs du livre Le sujet de ce livre est le développement des applications web. Ce n est

Plus en détail

Groupe Eyrolles, 2004, ISBN : 2-212-11346-3

Groupe Eyrolles, 2004, ISBN : 2-212-11346-3 Groupe Eyrolles, 2004, ISBN : 2-212-11346-3 Table des matières Avant Propos................................................ 1 Pourquoi ce livre?........................................... 1 Structure de

Plus en détail

Manuel de System Monitor

Manuel de System Monitor Chris Schlaeger John Tapsell Chris Schlaeger Tobias Koenig Traduction française : Yves Dessertine Traduction française : Philippe Guilbert Traduction française : Robin Guitton Relecture de la documentation

Plus en détail

Kofax Livre blanc. Technologie mobile d automatisation avancée pour la Comptabilité Fournisseurs. Résumé

Kofax Livre blanc. Technologie mobile d automatisation avancée pour la Comptabilité Fournisseurs. Résumé Kofax Livre blanc Livre blanc Kofax Technologie mobile d automatisation avancée pour la Comptabilité Fournisseurs Résumé De nos jours, l interaction en entreprise avec les applications métier disponibles

Plus en détail

Optimisation de code

Optimisation de code Optimisation de code Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Optimisation de code 1 / 77 But L optimisation cherche à améliorer

Plus en détail

VIII- Circuits séquentiels. Mémoires

VIII- Circuits séquentiels. Mémoires 1 VIII- Circuits séquentiels. Mémoires Maintenant le temps va intervenir. Nous avions déjà indiqué que la traversée d une porte ne se faisait pas instantanément et qu il fallait en tenir compte, notamment

Plus en détail

CCNA Discovery Travailler dans une PME ou chez un fournisseur de services Internet

CCNA Discovery Travailler dans une PME ou chez un fournisseur de services Internet Curriculum Name Guide du participant CCENT 3 Section 9.3 Dépannage de l adressage IP de la couche 3 Cette section consacrée au dépannage vous permettra d étudier les conditions nécessaires à l obtention

Plus en détail

Exercices INF5171 : série #3 (Automne 2012)

Exercices INF5171 : série #3 (Automne 2012) Exercices INF5171 : série #3 (Automne 2012) 1. Un moniteur pour gérer des ressources Le moniteur MPD 1 présente une première version d'un moniteur, exprimé en pseudo-mpd, pour gérer des ressources le nombre

Plus en détail

WHITE PAPER. Quels avantages la déduplication offre-t-elle aux entreprises? Livre blanc Acronis

WHITE PAPER. Quels avantages la déduplication offre-t-elle aux entreprises? Livre blanc Acronis Quels avantages la déduplication offre-t-elle aux entreprises? Livre blanc Acronis Copyright Acronis, Inc. 2000 2009 Table des matières Résumé... 3 Qu est-ce que la déduplication?... 4 Déduplication au

Plus en détail

Programmation d Applications Concurrentes et Distribuées (INF431)

Programmation d Applications Concurrentes et Distribuées (INF431) Programmation d Applications Concurrentes et Distribuées (INF431) Julien Cervelle Albert Cohen Eric Goubault Francesco Zappa Nardelli François Pottier Samuel Mimram Benjamin Werner 1er janvier 2015 2 Table

Plus en détail

IKAN ALM et HP ALM/HP Quality Center Enterprise Pour que les Equipes de Développement, de Test et de Production se rejoignent

IKAN ALM et HP ALM/HP Quality Center Enterprise Pour que les Equipes de Développement, de Test et de Production se rejoignent IKAN ALM et HP ALM/HP Quality Center Enterprise Pour que les Equipes de Développement, de Test et de Production se rejoignent Table of contents Sommaire...3 Définition du problème...4 Solution Description...5

Plus en détail

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau Performances PHP Julien Pauli Cyril Pierre de Geyer Guillaume Plessis Préface d Armel Fauveau Groupe Eyrolles, 2012, ISBN : 978-2-212-12800-0 Table des matières Avant-propos... 1 Pourquoi ce livre?.....................................................

Plus en détail

Introduction. Pourquoi ce livre? À qui s adresse ce livre?

Introduction. Pourquoi ce livre? À qui s adresse ce livre? Introduction Bien que récente, la solution e-commerce Magento s est imposée très rapidement, grâce à ses fonctionnalités innovantes et la qualité de son architecture. Elle est le socle de plusieurs dizaines

Plus en détail

Eric Bertrand ebertrand@ixis-cib.com. 08/11/06 Maître de conférence 1

Eric Bertrand ebertrand@ixis-cib.com. 08/11/06 Maître de conférence 1 Calcul parallèle des options MC. Eric Bertrand ebertrand@ixis-cib.com 1 Plan Contexte du calcul parallèle Qualités requises Architecture Outillage Problèmes rencontrés perspectives 2 Contexte du calcul

Plus en détail

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,

Plus en détail

Introduction aux Systèmes Distribués. Introduction générale

Introduction aux Systèmes Distribués. Introduction générale Introduction aux Systèmes Distribués Licence Informatique 3 ème année Introduction générale Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Plan

Plus en détail

Les transactions étendues et quelques Frameworks qui les supportent.

Les transactions étendues et quelques Frameworks qui les supportent. Les transactions étendues et quelques Frameworks qui les supportent. Christophe Ponsen cponsen@info.fundp.ac.be Institut d Informatique, Université de Namur Résumé Les transactions étendues posent de nombreux

Plus en détail

Introduction. Qu est-ce que Visual Basic 2008?

Introduction. Qu est-ce que Visual Basic 2008? Je suis profondément ravi que vous ayez choisi ce livre pour acquérir les compétences et techniques de programmation avec Microsoft Visual Basic 2008. Si nous nous découvrons mutuellement dans ce paragraphe,

Plus en détail

Le test automatisé des applications web modernes

Le test automatisé des applications web modernes Le test automatisé des applications web modernes Résumé : Aujourd hui, les applications Web sont développées au moyen de différentes technologies AJAX et Web 2.0. Des outils nouveaux et puissants offrent

Plus en détail

Analyse et programmation 1

Analyse et programmation 1 Analyse et programmation Aperçu du fonctionnement de l ordinateur Fonctionnement de l ordinateur Codage de l information Bus d échange d information CPU Exécution d un programme par la CPU Gestion des

Plus en détail

AxioTAP. Le système AxioMIX. Copyright 2005-2010 - 1stmarkets, Inc. Rev : 00.201.00205 Page 1 / 5

AxioTAP. Le système AxioMIX. Copyright 2005-2010 - 1stmarkets, Inc. Rev : 00.201.00205 Page 1 / 5 AxioTAP Le système AxioMIX Copyright 2005-2010 - 1stmarkets, Inc. Rev : 00.201.00205 Page 1 / 5 La technologie AxioTAP permet une capture fiable, sécurisée, non intrusive, furtive du flux de données circulant

Plus en détail

Programmation parallèle et distribuée

Programmation parallèle et distribuée ppd/mpassing p. 1/43 Programmation parallèle et distribuée Communications par messages Philippe MARQUET Philippe.Marquet@lifl.fr Laboratoire d informatique fondamentale de Lille Université des sciences

Plus en détail

Trois nouveaux formulaires sont donc nécessaires : Pour l affichage de la liste, un formulaire de sortie WEB_Liste associé à la table des [Films] ;

Trois nouveaux formulaires sont donc nécessaires : Pour l affichage de la liste, un formulaire de sortie WEB_Liste associé à la table des [Films] ; De la base 4D au site Web 20 Conception des formulaires Web Trois nouveaux formulaires sont donc nécessaires : Pour le dialogue, un formulaire WEB_Trouver associé à la table des [Paramètres] ; Pour l affichage

Plus en détail

Retrouver de vieux programmes et jouer sur VirtualBox

Retrouver de vieux programmes et jouer sur VirtualBox CHAPITRE 3 Retrouver de vieux programmes et jouer sur VirtualBox Ce chapitre présente des notions avancées de VirtualBox. Elles permettront de réaliser des configurations spécifiques pour évaluer des systèmes

Plus en détail

Introduction à la programmation concurrente

Introduction à la programmation concurrente Introduction à la programmation concurrente Moniteurs Yann Thoma Reconfigurable and Embedded Digital Systems Institute Haute Ecole d Ingénierie et de Gestion du Canton de Vaud This work is licensed under

Plus en détail

FAMILLE EMC VPLEX. Disponibilité continue et mobilité des données dans et entre les datacenters AVANTAGES

FAMILLE EMC VPLEX. Disponibilité continue et mobilité des données dans et entre les datacenters AVANTAGES FAMILLE EMC VPLEX Disponibilité continue et mobilité des données dans et entre les datacenters DISPONIBLITÉ CONTINUE ET MOBILITÉ DES DONNÉES DES APPLICATIONS CRITIQUES L infrastructure de stockage évolue

Plus en détail

FileMaker Server 14. Guide de démarrage

FileMaker Server 14. Guide de démarrage FileMaker Server 14 Guide de démarrage 2007-2015 FileMaker, Inc. Tous droits réservés. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, Californie 95054 FileMaker et FileMaker Go sont des marques

Plus en détail