Použití, výhody, async/await, thread, Task, Parallel, vracení a předávání dat mezi vlákny, synchronizace
Formát: 30 min praktická úloha, 15 min obhajoba + teorie. Teorie pokrývá threads, tasks, async/await, Parallel a synchronizaci. Praktika: hledání maxima paralelně vs sekvenčně s měřením času.
Moderní procesory mají více jader (cores). Program běžící v jednom vlákně využívá jen jedno jádro, ostatní jsou nečinná. Paralelní a asynchronní programování umožňuje:
Klasický příklad: webový server zpracovává 1000 požadavků současně. Bez paralelismu by každý uživatel čekal, než server vyřídí předchozího.
| Pojem | Význam |
|---|---|
| Concurrent (souběžný) | Více úloh se střídá na jednom jádře (rychlé přepínání). Vypadá to paralelně. |
| Parallel (paralelní) | Více úloh běží opravdu současně na různých jádrech. |
Concurrent (1 jádro, střídání):
Jádro 1: [A][B][A][B][A][B][A] ← rychlé přepínání mezi úlohami
Parallel (2 jádra, opravdu zároveň):
Jádro 1: [A][A][A][A][A][A][A]
Jádro 2: [B][B][B][B][B][B][B]
V praxi se pojmy často zaměňují. .NET ti to navíc skrývá: napíšeš Task.Run(...) a runtime se rozhodne, zda ho pustí na samostatném jádru, nebo přidá do fronty.
Klíčové rozdělení úloh:
| Typ | Co dělá | Jak řešit |
|---|---|---|
| CPU-bound | Náročný výpočet (faktoriál, šifrování, zpracování obrazu) | Task.Run, Parallel.For (využít víc jader) |
| I/O-bound | Čeká na vnější zdroj (disk, síť, DB) | async/await (vlákno se uvolní pro jinou práci) |
Pravidlo:
Task.Runpoužij na výpočty.awaitpoužij na čekání. Když to obrátíš, plýtváš zdroji.