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.
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.
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.
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.
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.
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.