C++ – Vlákna, korutiny a asynchronní I/O (CPP4)

Programování, C, C++

Od verze C++11 je součástí standardního C++ podpora vláken operačního systému, model pro vícevláknové aplikace a základní synchronizační nástroje. Díky tomu je možné vytvářet aplikace s paralelními výpočty a souběžným zpracováním I/O nezávisle na konkrétním hardware, operačním systému a implementaci C++.

Od verze C++20 pak přibývá spousta synchronizačních nástrojů ve standardní knihovně a přidává se podpora asynchronních funkcí, které fungují jako lehká kooperativní vlánka uvnitř aplikace. C++26 pak přináší nástroje pro podporu lock-free algoritmů a datových struktur.

Kurz je od základu postavený pro standardy C++20, C++23 a C++26. Na požádání lze upravit pro starší verzi C++. Pro některé části je potřeba knihovna Boost.Asio.

TOTO ŠKOLENÍ VÁM POMŮŽE:

  • Porozumět datovému modelu C++ pro aplikace běžící ve více hardwarových vláknech
  • Poznat nástroje pro synchronizaci práce s daty v paměti sdílené mezi vlákny
  • Seznámit se s fungováním korutin a naučit se je prakticky využívat v projektech
  • Vyzkoušet si praktické možnosti vláken a korutin s pomocí externích knihoven

KDO BY SE MĚL KURZU ZÚČASTNIT?

  • Vývojáři aktivně pracující na softwarových projektech a produktech
  • Programátoři pracující na projektech s vlákny a korutinami
  • Zájemci o programování s využitím systémů s více CPU
  • Také vývojáři, kteří chtějí srovnat možnosti C++ s jinými prostředími

Privátní školení a termíny na míru

Specifičnost tohoto školení a nízký zájem jednotlivců neumožňuje pro tento kurz vypisovat veřejné termíny. Tento kurz nabízíme pouze jako uzavřené privátní školení. Obsah, délka a termíny kurzů budou vytvořeny podle vašich specifických potřeb.

Cenovou nabídku vám rádi připravíme na základě vašich požadavků a cílů zaslaných e-mailem nebo zadaných prostřednictvím poptávkového formuláře. Cena privátního školení vychází z náročnosti požadované obsahové náplně školení, časového rozsahu a celkového počtu přihlášených osob.

KDE A KDY KURZ PROBÍHÁ?

Kontaktujte nás

S námi máte na výběr: Přijďte na kurz osobně do naší učebny, nebo se ke kurzu připojte online. Pokud preferujete online formu, uveďte prosím do poznámky v objednávce "Připojím se virtuálně".
Více informací k hybridní formě školení naleznete zde.

Náplň kurzu:

Skrýt detaily
  • Paralelní programování v C++
    1. Multithreading a multiprocessing
    2. Korutiny a plánování v rámci procesu
    3. Synchronizace přístupu k prostředkům
  • Vícevláknový datový model
    1. Co se všechno může pokazit (UB)
    2. Kdy vůbec C++ něco garantuje
    3. Jak psát korektní paralelní programy
  • Jak se pracuje s vlákny v C++
    1. Spouštění a zastavování vlánek
    2. Čekání na dokončení práce vlákna
    3. Ukončení hlavního vlákna a destruktory
  • Klasická synchronizace vláken
    1. Zamykání dat proti souběhu (mutex)
    2. Signalizace pomocí událostí (condition)
    3. Efektivita mutexů v operačních systémech
  • Pokročilé synchronizační nástroje
    1. Signalizace pomocí semaforů (semaphore)
    2. Další dostupné nástroje (barrier, latch)
  • Futures a asynchronní spouštění
    1. Objekt reprezentující budoucí hodnotu (future)
    2. Příslib hodnoty na straně producenta (promise)
    3. Provádění funkcí ve vlákně na pozadí (std::async)
  • Atomické proměnné a operace
    1. Viditelnost změn v paměti (visibility)
    2. Hardware a sekvence operací (memory order)
    3. Atomické operace a korektní programy
  • Bezzámkové datové struktury
    1. Aplikace atomických operací (CAS)
    2. Charakter algoritmů (lock-free, wait-free)
    3. Problém neviditelných změn (ABA)
  • Od vlastních implementací k C++26 a dál
    1. Změny datových strukturu pomocí kopií (RCU)
    2. Podpora pro znáčkování ukazatelů (hazard pointers)
    3. Bonus: Transakční paměť
  • Praktické aplikace vláken
    1. Komunikace pomocí TCP/IP
    2. Aplikace na protokolu HTTP
    3. Využívání existujících vláken (thread pool)
  • Asynchronní volání přes callbacky
    1. Plánování akcí pomocí callbacků
    2. Objekty akcí s typovou kontrolou (lambda, capture)
    3. Princip senders a receivers
  • Korutiny a asynchronní I/O
    1. Motivace práce s korutinami
    2. Externí knihovny s plánovačem
    3. Potenciální dopady v embedded světě
  • Principy asynchronního I/O
    1. Integrace plánovače a I/O
    2. Výpočty versus komunikace
    3. Interakce s multithreadingem
  • Asynchronní síťová komunikace
    1. Komunikace pomocí TCP/IP
    2. HTTP server a klient
    3. Souběh s ostatními operacemi
  • Embedded a komunikace s hardware
    1. Komunikace po sériové lince
    2. Lokální komunikační kanály
    3. Interakce s operačním systémem
  • Výpočetní vlákna a korutiny
    1. Korutiny mají řešit I/O
    2. CPU bound versus I/O bound
    3. Kombinace vláken a korutin
Předpokládané znalosti:
Dobrá znalost programování v jazyce C++
Doporučený předchozí kurz:
C++ – Praktické programování pro pokročilé (CPP2)
Časový rozvrh:
4 dny (9:00hod. - 17:00hod.)

Vybrané zákaznické reference

ERA a.s., Libor M.
C++ – Vlákna, korutiny a asynchronní I/O ( CPP4)
"Kurz splnil má očekávání. Srozumitelný a jasný výklad probírané problematiky s odkazem na praxi."
ERA a.s., Vladimír N.
C++ – Vlákna, korutiny a asynchronní I/O ( CPP4)
"Vzhledem k obtížnosti a šíři tématu se lektor velice profesionálně orientoval, srovnání s jinými programovacími jazyky."