200 likes | 315 Views
Paralelní programování. Synchronizace. Synchronizace. nejen provedení dvou operací ve stejný čas jakákoliv forma časové koordinace více procesů nebo u dálostí synchronizační pravidla / omezení – dané požadovanou činností, dané aplikací, musí se vymyslet
E N D
Paralelní programování Synchronizace
Synchronizace • nejen provedení dvou operací ve stejný čas • jakákoliv forma časové koordinace více procesů nebo událostí • synchronizační pravidla / omezení – dané požadovanou činností, dané aplikací, musí se vymyslet • v běžném životě se synchronizujeme pomocí času • v PC je většinou nepoužitelný
PC čas • kvůli preemptivnímu multitaskingu je čas nespojitý • musel by se měřit čas každé instrukce • IO operace, takže je čas provedení instrukce v podstatě nezjistitelný • stejně vzhledem k rychlosti provádění instrukcí jsou hodiny procesoru málo přesné • rozlišení na mikrosekundy, ale záleží na taktovací frekvenci procesoru, která se může měnit dynamicky • a i tak je to stejně málo • stejně je to jedno
PC čas • neznáme přesný čas instrukce / operace • měření by bylo brutálně náročné • musíme použít jiné synchronizační nástroje • inkrementální počítaní času nefunguje • hlavně kvůli přeplánování • základní problémy: • serializace • vzájemné vyloučení (mutual exclusion) • na tyto se dá všecko ostatní redukovat • jedním kódem může procházet více vláken
Serializace • zajištění posloupnosti událostí • události se provedou sekvenčně, pokud je zaručeno pořadí jejich provedení • události se provedou souběžně, pokud se mohou provést ve stejný čas nebo v různém pořadí • souběžně se provádí něco o čem z kódu nedokážeme říct, který řádek se provede dřív • nedeterministické • procesy se mohou přeplánovat • každé spuštění může dopadnout jinak • experiment je k ničemu, je nutné prokázat správnost teoreticky
Serializace • Mach musí obědvat dříve než Šebestová • Execution Path • Mach musí dát Šebestové vědět, že obědval
Serializace • a4 a b3 probíhá sekvenčně • a5 a b4 a b5 probíhá souběžně
Globální data • nutnost synchronizace není vždy zřejmá • závislá na prostředí, kompilátoru, … • jakákoliv práce se sdílenou proměnnou vyžaduje maximální opatrnost • atomičnost – špatně viditelná
Globální data • většinou bude fungovat • jaké situace mohou nastat? • globální data mohou být sdílená • musíme vždy předpokládat, že jsou
Vzájemné vyloučení • Je jedno kdo obědvá dříve, ale nesmí obědvat současně • Mutual exclusion
Semafor • programová struktura, která se hodí pro synchronizaci • strukturované, přenosné, univerzální • alternativy: komplexnější struktury • semafor = integer • při vytvoření se nastaví počáteční hodnota • při průchodu se sníží o 1 • pokud je hodnota záporná pak se vlákno uspí (will block) • pokud se hodnota semaforu zvýší na 0, pak je některé ze spících vláken probuzeno (wake-up)
Semafor • u standardního semaforu nevíme, které vlákno bude probuzeno • může existovat „férový“ semafor, který probudí nejstarší vlákno • zabraňuje stárnutí • u pracovních vláken není moc žádoucí • aktuální hodnotu semaforu nelze zjistit – stav semaforu je „neurčitý“ • semafor je atomický • vlákno buď projde nebo neprojde • hodnota semaforu = počet propustek • binární semafor = jedna propustka = mutex
Semafor • průchod semaforem • wait() = acquire() = decrement() • signal() = release() = increment() • existují různá rozšíření: • fair semaphore • tryacquire() • semafory se kombinují do složitějších struktur • experiment je k ničemu • synchronizační vzory
Testování • testování není příliš účinné • to, že něco funguje neznamená, že to funguje vždy • lepší je dokázat, že to fungovat musí (nebo nemůže) • ale pomáhá to http://akela.mendelu.cz/~xpopelka/cs/pp/paralelni.zip • Python 2.7 + Swampy • python lib\swampy\Sync.py sync_code\test.py • slovo Threadoznačuje začátek kódu ve vláknu • před prvním Threadje společná část • komentáře se považují za prováděný řádek
Testování • vytvoření semaforu: • semafor = Semaphore(1) • metody: • semafor.wait(), semafor.signal() • proměnné, print(), • podmínky • if něco: něco • nebo s odsazením • funkce num_threads()
Synchronizační vzory – signalizace • semafor prácehotova(0) • binární semafor • řeší serializaci
Synchronizační vzory – setkání • ani jeden nesmí pokračovat pokud nedorazil ten druhý • setkání = rendezvous
Synchronizační vzory – setkání • varianty?
Synchronizační vzory – setkání • uváznutí – deadlock • varianty?