Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
S Sample_Solutions
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OOP
  • Sample_Solutions
  • Wiki
  • Cv9

Cv9 · Changes

Page history
Create Cv9 authored Nov 18, 2019 by Ing. Lukáš Hruška's avatar Ing. Lukáš Hruška
Hide whitespace changes
Inline Side-by-side
Showing with 66 additions and 0 deletions
+66 -0
  • Cv9.md Cv9.md +66 -0
  • No files found.
Cv9.md 0 → 100644
View page @ 89a08920
# Cvičenie 9
Cieľom tohoto cvičenia je oboznámiť sa s paralelnou prácou viacerých vlákien. Doteraz ste vedeli programovať veci iba sekvenčne, teda po sebe.
Tento prístup však nie je veľmi vhodný, najmä z užívateľského hľadiska, keď je
potrebné realizovať veci, ktoré trvajú dlhšie, a teda by zablokovali užívateľské rozhranie, ktoré beží v hlavnom vlákne (slávne this program is not responding). Taktiež pri klasickom, sekvenčnom, programovaní je problém robiť rôzne časovače, čítanie zo súborov, atď.
Niekoľko uvedených príkladov nám naznačuje potrebu programy paralelizovať.
V rámci dnešného cvičenia si ukážeme niekoľko nástrojov použiteľných na paralelizáciu, konkrétne
Thread, async Task, BackgroundWorker. Threadpool nebudeme potrebovať, ale môžete si ho naštudovať sami.
## 1. Parallelisation
Vytvorte si konzolovú aplikáciu. V rámci nej si inizializujte zoznam hodnotami 0-99. Vypočítajte druhú odmocninu každého čísla a vypíšte ich (všetko vykonajte v jednom cykle, nech hodnoty v zozname zostanú nezmenené v zozname).
Zobrazili sa čísla v poradí? Prečo?
Teraz si tento kód upravte na paralelný foreach:
`Parallel.ForEach(collection, lambda);`
```csharp
Parallel.ForEach(numbers, x =>
{
//magic with x
});
```
Vypísali sa teraz tieto čísla v poradí? Prečo?
## 2. Threads
Vlákna majú v základe 3 časti:
- Inicializácia
- Beh
- Finalizácia
Inicializácia a beh sú zvyčajne v jednej funkcií (alebo ešte lepšie inicializácia je v osobitnej funkcií a je zavolaná pri spustení vlákna). V rámci behu sa vykonáva nejaká dlhotrvajúca úloha, v našom prípade to bude odpočítavanie do výbuchu bomby:
- Nech sa v každom momente kontroluje či je stlačené nejaké tlačidlo (pomocou `Console.ReadKey()` - ak neviete ako na to, použite StackOverflow) ak je stlačené vami zvolené tlačidlo, odpočítavanie sa zastaví a vypíše sa zodpovedajúca správa, inak ak dosiahne 0 bomba vybuche, znovu vypíšte správu.
Ako na vlákna:
- alternatíva 1: https://www.tutorialspoint.com/csharp/csharp_multithreading.htm
- alternatíva 2:
```csharp
Thread thread = new Thread(() =>
{
//task that takes a long time to finish
});
thread.Start();
```
`thread.Abort()` zastaví vlákno, treba ošetriť! Ako na to máte ukázané v rámci horeuvedeného odkazu.
Túto úlohu možete riešiť jedným z uvedených spôsobov - _dedenie od triedy Thread_, ako je to v odkaze alebo _lambda výraz_
## 3. Background worker
Otvorte si projekt z minulého cvičenia a zabezpečte, aby sa každých X sekúnd zvýšil plat každého zamestnanca o 3% (rátajme medziročný rast mzdy) - doplňte si potrebné metódy a premenné. Využite BackgroundWorker:
https://www.dotnetperls.com/backgroundworker
Clone repository
  • Assignment part 1
  • Assignment part 2
  • Assignment part 3
  • Cv10
  • Cv11
  • Cv4
  • Cv5
  • Cv7
  • Cv8
  • Cv9
  • Requirements
  • Home