1
Les outils de base du multithreading
- Qu'est-ce qu'un thread ? Notion de thread et processus.
- Le partage de la mémoire par les threads.
- ThreadPool pour éviter la création des threads.
- AppDomain pour isolation de module.
- Synchronisation multiprocess : les objets de synchronisation Event, Mutex, Semaphore.
- Synchronisation intraprocess : la classe Monitor du framework et le mot clé lock.
- Le danger d'étreinte fatale et sa détection.
- La classe ReaderWriterSlimLock. La classe Interlocked.
Travaux pratiques
Synchronisation de deux threads, producteur et consommateur de données. Utilisation des classes standards.
2
Bases de la Task Parallel Library
- Démarrer les tâches et en obtenir leur résultat.
- Mots clé await et async.
- Continuations pour gérer la fin normale, sur exception, annulation.
- Event Asynchronous Pattern versus Task Asynchronous Pattern.
- Parallel Linq pour exécuter les requêtes Linq en parallèle.
- Gestion des exceptions, annulations avec Parallel Linq.
- Parallel.ForEach pour lancer des tâches basées sur les données.
- Parallel.For pour des calculs d’agrégats.
Travaux pratiques
Calcul d’une somme en parallèle avec différents outils. Démarrage de Tasks et utilisation de await et async.
3
Plus de détails sur la Task Parallel Library
- Choix de l’endroit où exécuter une tâche : TaskScheduler.
- ConfigureAwait pour optimiser la reprise.
- Rapporter un progrès avec Progress<T>.
- Annulation de tâche avec CancellationTokenSource.
- IAsynEnumerable<T> et await foreach de C# 8.
Travaux pratiques
Annulation de tâche et rapport de progrès dans le crawler.
4
Collections pour la concurrence
- Collections immutables quand un instantané des données est suffisant.
- Collections concurrentes pour un partage protégé de données modifiées.
- Collections pour les problématiques producteurs/consommateurs.
Travaux pratiques
Optimisation et protection du crawler avec des collections concurrentes.
5
Task Parallel Library Dataflow
- Task Parallel Library Dataflow pour les exécutions en réseaux parallèles.
- Les différents blocs de Dataflow, et leur liaison.
- Liaison conditionnelle des blocs.
- Dataflow et bufferisation des données.
- Dataflow et parallélisation des traitements.
- Liaison dynamique des blocs.
Travaux pratiques
Communiquer entre un serveur web et un backend de manière découplée.
6
Reactive Extension pour une programmation réactive
- Reactive Extension pour traiter les événements comme des séquences.
- Modèle de conception réactif.
- Observables chauds et froids, abonnement aux données des événements.
- Écriture à la Linq pour traiter les données.
Travaux pratiques
Fournir une implémentation d’autosuggestion reactive.