Plan Szkolenia

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 

Wymagania

  • Umiejętność posługiwania się narzędziami do budowania oprogramowania w C++ w środowisku GNU/Linux i/lub MS Windows
  • Znajomość zagadnień programowania w C++ (paradygmat proceduralny jak i obiektowy) na poziomie zaawansowanym i średnio zaawansowanym
  • Znajomość zagadnień tworzenia kodu uogólnionego (szablony) 
 28 godzin

Liczba uczestników


cena netto za uczestnika

Opinie uczestników (4)

Propozycje terminów

Powiązane Kategorie