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