Jazyk C – Vlákna a asynchronní I/O (C4)
Programování, C, C++
Kurz se zaměřuje na praktické zvládnutí paralelismu v C – od klasických vláken a zámků až po atomické operace, lock-free algoritmy a práci se sdílenou pamětí. Účastníci se naučí rozumět vícevláknovému paměťovému modelu a důsledkům chybného sdílení dat, jako jsou data races, nekonzistence a deadlocky.
Vedle vláken se budeme věnovat také událostmi řízenému programování, neblokujícímu I/O a návrhu asynchronních rozhraní pomocí callbacků a stavových strojů. Tyto techniky umožňují efektivně kombinovat výpočty, komunikaci a obsluhu hardware a tvoří základ moderních síťových, systémových i embedded aplikací v jazyce C.
Kurz je aktualizovaný na standard C23. Je určený především do prostředí embedded software a unixových systémů. Lze ovšem upravit na míru vašim potřebám.
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 dat v paměti sdílené mezi vlákny
- Seznámit se s možnostmi knihovny ISO C11, POSIX-1.2024 a externími knihovnami
- Vyzkoušet si programování založené na událostech s pomocí stavových strojů
KDO BY SE MĚL KURZU ZÚČASTNIT?
- Zkušenější vývojáři embedded systémů a firmware
- Vývojáři operačních systémů, runtime a frameworků
- Zájemci o programovací jazyky a prostředí
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
-
Práce s vlákny a procesy
-
Vlákna podle standardu od C11
-
Procesy na POSIX platformách
-
UNIX a strach z používání vláken
-
Vícevláknový datový model
-
Problémy souběžného přístupu
-
Vztah happens-before
-
Přístup ke sdíleným datům
-
Synchronizace vláken
-
Zámky a kritické sekce (mutex)
-
Signalizace podmínek (condition variable)
-
Problémy zamykání a deadlocky
-
Možnosti unixových systémů
-
Semafory a fronty zpráv (POSIX, System V)
-
Sdílená paměť (POSIX, System V)
-
Dědění priorit (pthreads)
-
Atomické operace
-
Synchronizace bez zamykání (lock-free)
-
Memory ordering a hardwarové bariéry
-
Předávání výsledků mezi vlákny (acquire, release)
-
Bezzámkové datové struktury
-
Aplikace atomických operací (CAS)
-
Charakter algoritmů (lock-free, wait-free)
-
Problém neviditelných změn (ABA)
-
Zpětná volání
-
Ukazatele na funkce a kontext (callback)
-
Rekurzivní a odložená zpětná volání
-
Imitace lambdy z vyšších jazyků
-
Stavové zpracování událostí
-
Stavový stroj s informací o průběhu
-
Kooperativní přerušování činnosti
-
Imitace korutin a kooperativních úloh
-
Smyčka událostí
-
Událostmi řízený software
-
Registrace a řetězení callbacků
-
Čekání na skupinu událostí (select)
-
Neblokující I/O
-
Podpora operačního systému
-
Umožňuje vlastní kooperativní plánovač
-
Implementace asynchronního plánovače
-
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
-
Bonus: Multiplatformní knihovny
-
libevent
-
libuv
-
libev
-
libcurl
-
Mongoose
-
Předpokládané znalosti:
-
Dobrá znalost programování v C
-
Doporučený předchozí kurz:
-
Jazyk C – Praktické programování pro pokročilé (C2)
-
Časový rozvrh:
-
3 dny (9:00hod. - 17:00hod.)