Programowanie wielowątkowe w języku C++ Certificate for Adrian ...
Certificate ID:
763891
Authentication Code:
68e44
Certified Person Name:
Adrian Kamiński
Trainer Name:
Tomasz Jasiukiewicz
Duration Days:
4
Duration Hours:
28
Course Name:
Programowanie wielowątkowe w języku C++
Course Date:
20 May 2024 09:00 to 14 June 2024 16:00
Course Outline:
Wyzwania i problemy współbieżności
- Ograniczenia sprzętowe platform - wątki sprzętowe, potoki, spójność pamięci cache
- Elementarne pojęcia związane z programowaniem wielowątkowym (poprawność programu wielowątkowego, żywotność, zagłodzenie, zakleszczenie, wyścig, atomowość, modele spójności, taksonomia Flynn’a)
- Dostępne w C++ mechanizmy implementowania wielowątkowości i wieloprocesowości
- Implementacja biblioteki standardowej - elementy od C++14 do dnia dzisiejszego (C++2a)
- Implementacja dostępna w Boost - różnice w stosunku do biblioteki standardowej
Procesy i wątki
- Aplikacje wieloprocesowe a wielowątkowe
- System operacyjny a wątki (krótki przegląd dostępnych implementacji)
- Mechanizmy synchronizacji procesów i wątków
- Strukturalna implementacja synchronizacji
- Specyfika implementacji wielowątkowości w podejściu obiektowym (rola wzorca RAII)
Model pamięci w języku C++
- Obiekty i miejsca w pamięci
- Szeregowanie operacji i ich wymuszanie
- Relacje: synchronizacji, poprzedzania, porządkowania operacji na rzecz działań atomowych, sekwencje zwalniania
- Bariery pamięci
- Operacje atomowe
Zarządzanie wątkami w standardzie C++14 i nowszych
- Klasa std::thread i uruchamianie wątków
- Identyfikacja wątku
- Przyłączanie i odłączanie wątku
- Wątki a kontenery standardowe
- Obsługa wyjątków w wątkach C++14
Wzajemne wykluczanie i sekcje krytyczne
- Proste zasady wzajemnego wykluczania
- Koncepty (rodzaje) dostępnych obiektów blokujących
- Szybkie wprowadzenie do obsługi czasu w C++14 (biblioteka chrono)
- Klasy std::mutex, std::timed_mutex, std::shared_mutex i pochodne
- Wzorzec RAII w obsłudze blokad (std::lock_guard, std::unique_lock)
- Blokady zależne i odroczone (std::lock)
- Własność i współwłasność blokad i wątków
- Problem czytelnicy-pisarze
- Jednokrotna inicjalizacja
- Pamięć lokalna (prywatna) wątku (ang. std::thread_local)
Blokady i synchronizacja wątków
- Operacje na semaforach
- Blokady rekurencyjne
- Blokady z definicją poziomu blokowania
- Zmienne decyzyjne i współpraca z blokadą
- Implementacja barier aktywnych i pasywnych (ang. Idle Waits, Busy Waits)
- Wznawianie działania wątków
- Komunikacja pomiędzy wątkami (model Aktora i CSP)
Zadania asynchroniczne
- Asynchroniczne zdarzenia i ich obsługa
- Przyszłości (ang. future)
- Obietnice (promesy) (ang. promise)
- Przygotowane zadania (ang. packaged_task)
Typy atomowe
- Standardowe typy atomowe
- Uniwersalna flaga atomowa (std::atomic_flag)
- Szablon klasy std::atomic<T> i jego specjalizacje
- Funkcje narzędziowe (wolne) typów std::atomic
Specyfika projektowania API wielowątkowego
- Projektowanie struktur z użyciem blokad - blokady grubo i drobno-ziarniste
- Wydajność współbieżnego kodu - techniki szacowania i pomiaru
- Partycjonowanie danych
- Skalowalność rozwiązań
- Obsługa błędów i sytuacji wyjątkowych w architekturze aplikacji
Testowanie i debugowanie aplikacji wielowątkowych
- Przeglądy kodu pod kątem operacji wielowątkowych
- Specyfika testowania aplikacji wielowątkowych
- Testy jednostkowe
- Zwiększanie prawdopodobieństwa sytuacji awaryjnych na rzecz testów
- Metody formalne testowania aplikacji wielowątkowych
- Wzorce architektury aplikacji wielowątkowych a testowanie i debugowanie (przegląd)
Zaawansowane zarządzanie wątkami
- Wątki zależne (wzorzec Sagi)
- Unikanie współzawodnictwa w dostępie do danych
- Kontrolowane zatrzymanie i przerwanie wątku
- Przerwanie wywołań blokujących
- Obsługa przerwania
- Wykradanie zadań
- Przerywanie zadań w trakcie kończenia działania aplikacji
Wzorce projektowe wielowątkowości
- Rodzaje i przeznaczenie wzorców wielowątkowych
- Zakres zastosowania wzorców
- Pula wątków (ang. Thread Pool)
- Wzorzec aktywnego obiektu (ang. Active Object)
- Bezpieczna wielowątkowo kolejka (ang. Thread Safe Queue)
- Wzorzec producenta i konsumenta (ang. Producer Consumer)
- Wzorzec monitora (ang. Monitor)
- Bezpieczeństwo wielowątkowe wzorców GoF