Mulțumim pentru trimiterea solicitării! Un membru al echipei noastre vă va contacta în curând.
Mulțumim pentru trimiterea rezervării! Un membru al echipei noastre vă va contacta în curând.
Durata 28 ore
Schița de curs
Provocări și probleme de concurență
- Limitări hardware ale platformelor - fire hardware, conducte, coerența cache
- Concepte elementare legate de programarea multi-thread (corectitudinea programului multi-thread, viața, foametea, blocarea, cursa, atomicitatea, modele de coerență, taxonomia lui Flynn)
- Mecanisme disponibile în C++ pentru implementarea multi-thread și multi-proces
- Implementarea bibliotecii standard - elemente de la C++14 până în prezent (C++2a)
- Implementarea disponibilă în Boost - diferențe față de biblioteca standard
Procese și fire de execuție
- Aplicații multi-proces versus multi-thread
- Sistemul de operare și firele de execuție (scurtă trecere în revistă a implementărilor disponibile)
- Mecanisme de sincronizare a proceselor și firelor de execuție
- Implementarea structurală a sincronizării
- Specificul implementării multi-thread în abordarea orientată pe obiecte (rolul modelului RAII)
Modelul de memorie în limbajul C++
- Obiecte și locații în memorie
- Programarea operațiilor și forțarea lor
- Relații: sincronizare, precedență, ordonare a operațiilor pentru acțiuni atomice, secvențe de eliberare
- Bariere de memorie
- Operații atomice
Gestionarea firelor de execuție în standardul C++14 și versiuni mai noi
- Clasa std::thread și lansarea firelor de execuție
- Identificarea firului de execuție
- Atasarea și detașarea firului de execuție
- Fire de execuție și containere standard
- Gestionarea excepțiilor în firele de execuție C++14
Excludere mutuală și secțiuni critice
- Reguli simple de excludere mutuală
- Concepte (tipuri) de obiecte de blocare disponibile
- Introducere rapidă în gestionarea timpului în C++14 (biblioteca chrono)
- Clasele std::mutex, std::timed_mutex, std::shared_mutex și derivate
- Modelul RAII în gestionarea blocurilor (std::lock_guard, std::unique_lock)
- Blocări dependente și amânate (std::lock)
- Proprietatea și coproprietatea blocurilor și firelor de execuție
- Problema cititor-scriitor
- Inițializare unică
- Memorie locală (privată) a firului de execuție (std::thread_local)
Blocări și sincronizare a firelor de execuție
- Operații pe semafoare
- Blocări recursive
- Blocări cu nivel de blocare definit
- Variabile de decizie și colaborarea cu blocarea
- Implementarea barierelor active și pasive (Idle Waits, Busy Waits)
- Reluarea acțiunii firelor de execuție
- Comunicarea între fire de execuție (modelul Actor și CSP)
Sarcini asincrone
- Evenimente asincrone și gestionarea lor
- Viitoare (future)
- Promisiuni (promise)
- Sarcini pregătite (packaged_task)
Tipuri atomice
- Tipuri atomice standard
- Steag atomic universal (std::atomic_flag)
- Șablonul clasei "std::atomic<T>" și specializările sale
- Funcții utilitare (lente) ale tipurilor std::atomic
Specificul proiectării API-urilor multi-thread
- Proiectarea structurilor folosind blocări - blocări cu granulație grosieră și fină
- Performanța codului concurent - tehnici de estimare și măsurare
- Partiționarea datelor
- Scalabilitatea soluțiilor
- Gestionarea erorilor și a situațiilor excepționale în arhitectura aplicațiilor
Testarea și depanarea aplicațiilor multi-thread
- Revizuirea codului din perspectiva operațiilor multi-thread
- Specificul testării aplicațiilor multi-thread
- Teste unitare
- Creșterea probabilității situațiilor de criză pentru teste
- Metode formale de testare a aplicațiilor multi-thread
- Modele de arhitectură a aplicațiilor multi-thread și testarea și depanarea (revizuire)
Gestionarea avansată a firelor de execuție
- Fire de execuție dependente (modelul Saga)
- Evitarea concurenței în accesul la date
- Oprire și întrerupere controlată a firului de execuție
- Întreruperea apelurilor de blocare
- Gestionarea întreruperilor
- Furtul sarcinilor
- Întreruperea sarcinilor în timpul finalizării aplicației
Modele de proiectare multi-thread
- Tipuri și scopul modelelor multi-thread
- Domeniul de aplicare al modelelor
- Pool de fire de execuție (Thread Pool)
- Modelul obiectului activ (Active Object)
- Coadă sigură pentru fire de execuție (Thread Safe Queue)
- Modelul producător-consumator (Producer Consumer)
- Modelul monitor (Monitor)
- Securitatea multi-thread a modelelor GoF
Cerințe
- Abilitatea de a utiliza instrumente de construire a software-ului în C++ în mediul GNU/Linux și/sau MS Windows
- Cunoașterea conceptelor de programare în C++ (paradigma procedurală și orientată pe obiecte) la un nivel avansat și intermediar
- Cunoașterea conceptelor de creare a codului generalizat (șabloane)
Mărturii (1)
Exemple practice
Jan Kaniuka - SIEC BADAWCZA LUKASIEWICZ - PRZEMYSLOWY INSTYTUT AUTOMATYKI I POMIAROW PIAP
Curs - Programowanie wielowątkowe w języku C++
Tradus de catre o masina