Niveau d'étude
BAC +3
ECTS
3 crédits
Composante
Sciences économiques, gestion, mathématiques et informatique
Volume horaire
32h
Période de l'année
Enseignement cinquième semestre
Description
Ce cours présente les aspects systèmes liés à la programmation multitâche et les paradigmes de la concurrence dont la maîtrise est devenue indispensable pour les applications modernes. La mise en pratique est faite en Java/Kotlin (comme par ex sous Android). Le premier objectif de ce cours est donc la compréhension des paradigmes de la concurrence entre différentes activités (processus ou thread). Le deuxième objectif est la maîtrise des modèles de programmation concurrente avec mise en application sur des cas concrets.
Objectifs
Introduction à la programmation concurrente et multitâches : étude des problèmes liés à ces techniques de programmation et la compréhension des problèmes liés au partage de ressources et de données lorsque plusieurs traitements ont lieu sur une même source de données.
- Introduction aux différents outils de parallélisation de code.
- Introduction aux problèmes de dépendances de traitements et de notion d’accélération.
- Introduction de la notion de processus léger.
- Introduction outils java pour l’exécution de multiples tâches de code au sein d’un même processus. Notions de flot d’exécution (“Thread”) et tâche (“Runnable”, “Callable”).
- Introduction aux primitives de synchronisation des processus légers en Java (notion de code en exclusion mutuelle, rendez-vous, d’exécution de code asynchrone avec la notion de “Future”).
- Introduction aux outils de gestion de processus légers (gestion de la mémoire, traitements répétitifs via des “looper”, groupe de processus légers via les “thread pool”).
Évaluation
Modalités : Mixte : CC + CT
SESSION 1 :
Contrôle Continu
• Type : Écrit, Machine
• Durée : --
• Précisions : Le contrôle continu représente les 50 % de la note finale,
le contrôle continu pouvant prendre la forme d’un examen (écrit ou sur machine) ou d’un TD noté au choix du responsable du cours.
Contrôle Terminal
• Type : Écrit
• Durée : --
• Précisions : L’examen final représente 50 % de la note finale.
Régime Dérogatoire
• Type : Écrit
• Durée : --
• Précisions : L’examen final représente 100 % de la note finale.
SESSION 2 :
• Type : Écrit
• Durée : --
• Précisions : L’examen final représente 100 % de la note finale.
Utilisation de l'intelligence artificielle :
L’utilisation de l’Intelligence Artificielle est interdite lors des évaluations.
Heures d'enseignement
- CMCM16h
- TDTD16h
Pré-requis obligatoires
Connaissances en Java et en programmation Objet.
Compétences visées
- Connaissance des paradigmes de la programmation concurrente et multitâche.
- Maîtrise des modèles pratiques de programmation concurrente.
- Réalisation d’applications en utilisant ces concepts.
Bibliographie
- Java Concurrency in Practice, Brian Goetz et al, 2006, Addison Wesley, ISBN 978-0321349606
- Hands-on Design Patterns with Kotlin: Build scalable applications using traditional, reactive, and concurrent design patterns in Kotlin, Alexey Soshin, 2018, ISBN 978-1788998017
- Mastering Concurrency Programming with Java 8, Javier Fernandez Gonzalez, 2016, ISBN 978-1785886126
- (théorie) The art of Multiprocessor Programming, Maurice Herlihy & Nir Shavit, 2006, ISBN 978-0-12-397337-5
- (théorie) Concurrent Programming : Algorithms, Principles, and Foundations, Michel Raynal, 2013, ISBN 978-3-642-32026-2
