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
    1. Vlákna podle standardu od C11
    2. Procesy na POSIX platformách
    3. UNIX a strach z používání vláken
  • Vícevláknový datový model
    1. Problémy souběžného přístupu
    2. Vztah happens-before
    3. Přístup ke sdíleným datům
  • Synchronizace vláken
    1. Zámky a kritické sekce (mutex)
    2. Signalizace podmínek (condition variable)
    3. Problémy zamykání a deadlocky
  • Možnosti unixových systémů
    1. Semafory a fronty zpráv (POSIX, System V)
    2. Sdílená paměť (POSIX, System V)
    3. Dědění priorit (pthreads)
  • Atomické operace
    1. Synchronizace bez zamykání (lock-free)
    2. Memory ordering a hardwarové bariéry
    3. Předávání výsledků mezi vlákny (acquire, release)
  • 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)
  • Zpětná volání
    1. Ukazatele na funkce a kontext (callback)
    2. Rekurzivní a odložená zpětná volání
    3. Imitace lambdy z vyšších jazyků
  • Stavové zpracování událostí
    1. Stavový stroj s informací o průběhu
    2. Kooperativní přerušování činnosti
    3. Imitace korutin a kooperativních úloh
  • Smyčka událostí
    1. Událostmi řízený software
    2. Registrace a řetězení callbacků
    3. Čekání na skupinu událostí (select)
  • Neblokující I/O
    1. Podpora operačního systému
    2. Umožňuje vlastní kooperativní plánovač
    3. Implementace asynchronního plánovače
  • 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
  • Bonus: Multiplatformní knihovny
    1. libevent
    2. libuv
    3. libev
    4. libcurl
    5. 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.)