Vedel by niekto dat navrh na projekt popr. priklad, na ktorom by sa dalo vyskusat/precvicit viacvlaknove programovanie? Robil by som to v jazyku C#.
Dakujem za napady
Napsat si TCP/IP server a klienta k tomu. Server multi, aby najednou zvladl vice klientu.
ok, dakujem za tip, tiez som nad tym uvazoval, ale to mi pride celkom na dlhsie.
Citace od: thread kdy 23. 06. 2017, 09:31:11
ok, dakujem za tip, tiez som nad tym uvazoval, ale to mi pride celkom na dlhsie.
Na dlhsie? Nepsal že máš napsat celý funkční webserver, ale nějaký blíže neurčený TCP/IP server. Prostě si třeba na zkoušku napiš něco co posloucha na nějakém portu a všem připojeným klientům posílá zpátky počet aktuálně připojených kdykoliv se připojí / odpojí nějaký další klient. Nebo jim každou vteřinu pošle aktuální čas.Taková věc je na pár řádků.
zosortuj niekolko 10m riadkov s definovanym poctom threadov
Citace od: thread kdy 23. 06. 2017, 09:31:11
ok, dakujem za tip, tiez som nad tym uvazoval, ale to mi pride celkom na dlhsie.
To napises hned, pak sem muzes postnout vysledek.
Znas metody jako jsou Producent/konzument, atd?
Ano poznam tie metody
Citace od: thread kdy 23. 06. 2017, 08:43:16
Vedel by niekto dat navrh na projekt popr. priklad, na ktorom by sa dalo vyskusat/precvicit viacvlaknove programovanie? Robil by som to v jazyku C#.
Dakujem za napady
http://www.ksi.mff.cuni.cz/lectures/NPRG042/html/index.html#@tab_assignments
TL;DR:
- Parallel Sorting
- K-means Clustering
- Levenshtein's Edit Distance
- Physical Simulation
- Matrix Multiplication
na niektore z tych uloh je potrebna asi aj ina znalost, ako len paralelne programovanie.
Hmmm...
Nejspíše ano - a v čem to vadí?
Citace od: thread kdy 23. 06. 2017, 22:02:11
na niektore z tych uloh je potrebna asi aj ina znalost, ako len paralelne programovanie.
Citace
na niektore z tych uloh je potrebna asi aj ina znalost, ako len paralelne programovanie.
Krom znalosti algoritmů (abyste je mohl paralelizovat) moc víc znát nepotřebujete, pokud se nesnažíte o opravdu vysoký výkon (v takovém případě se hodí např. znalost vektorových instrukcí).
Samozřejmě, nepočítejte moc s tím, že pokud algoritmus pustíte v N vláknech, dosáhnete N-krát rychlejšího výpočtu, ale na procvičení se tyhle úlohy určitě použít dají (a na MFF se i pro tyto účely používají).
Citace od: thread kdy 23. 06. 2017, 22:02:11
na niektore z tych uloh je potrebna asi aj ina znalost, ako len paralelne programovanie.
Ten TCP server je dobrý nápad, základ je na pár řádků a pak se dá použít více vláken, GCD nebo třeba kooperativní multitasking (to je obzvlášť poučné).
Zkus paralelně generovat Mandelbrotovu množinu.
Taky bych podpořil TCP server. Tam jde aplikovat hned několik přístupů.
Thread/klient je overkill a pro reálné využití to není, listener a pool workerů je asi lepší, můžete tam dělat nějaký loadbalancing.
V rámci studia přistupujte na sdílené prostředky, určitě si zkuste i něco v shm.
Jako další challenge bych doporučil non-blocking IO a/nebo podporu TLS. Obzvláště to druhé je dobré si zažít - lekce správného monitorování událostí na soketu. Ačkoliv C# neznám, předpokládám, že to bude podobně "zajímavé" jako v C/C++.
-K-
este celkom zalezi ci sa chces naucit viac multithreadove programovenie samotne alebo dake nadstavby v C#.
teda ci si sam budes riadit thready, pouzivat len zaklady ako mutexy, semafory, fence, atomicke operacie atd. alebo sa chces naucit dake c# nadstavby ako TPL alebo PLINQ
Tak ponovom sa odporuca pouzivat TPL a Tasky. V podstate aj ked spravite Task.Run(() => {}), tak sa vytvori novy thread.
Citace od: klokan kdy 26. 06. 2017, 06:55:32
Zkus paralelně generovat Mandelbrotovu množinu.
tak to ani neviem co je :/
Citace od: thread kdy 27. 06. 2017, 21:07:03
V podstate aj ked spravite Task.Run(() => {}), tak sa vytvori novy thread.
Not true ;D vytvoří se nový task což nikoliv nutně znamená vytvoření threadu
Co jde použít Parallel.Invoke už to není co dřív :-D ;D
Parallel.Invoke(
() => {
Console.WriteLine("Bobek 1 Tlacim");
Thread.Sleep(5000);
Console.WriteLine("Bobek 1 Uuuuleva");
},
() => {
Console.WriteLine("Bobek 2 Tlacim");
Thread.Sleep(3000);
Console.WriteLine("Bobek 2 Je venku");
},
() => {
Console.WriteLine("Bobik 3 Tlacim");
Thread.Sleep(1000);
Console.WriteLine("Bobik 3 Zblunk");
});
App, nic nižšího než C# 5 nebo 6 nemá smysl řešit.
Citace od: thread kdy 27. 06. 2017, 21:07:51
Citace od: klokan kdy 26. 06. 2017, 06:55:32
Zkus paralelně generovat Mandelbrotovu množinu.
tak to ani neviem co je :/
https://cs.wikipedia.org/wiki/Mandelbrotova_mno%C5%BEina
pro paralelizaci velmi dobrý kandidát, můžeš si hrát s barvičkama, prozkoumat údolí mořských koníků, najdeš zde geometrické i "přírodní" onrazce... je to k ničemu, ale přitom krásný a fascinující.
https://m.youtube.com/watch?v=0jGaio87u3A
Citace od: thread kdy 27. 06. 2017, 21:07:51
Citace od: klokan kdy 26. 06. 2017, 06:55:32
Zkus paralelně generovat Mandelbrotovu množinu.
tak to ani neviem co je :/
Fraktál.
Vidět se to dá třeba v aplikaci Fraqtive (http://fraqtive.mimec.org/)
Kazda trosku zlozitejsia GUI aplikacia potrebuje vlakna.
Napriklad take kopirovanie suborov. Jedno vlakno kopiruje subory a druhe vlakno zobrazuje stav kopirovania...
Na to aby druhe vlakno vedelo zobrazit tento stav musi priebezne cakat na prve vlakno inak ti to hodi errory, pouziva sa k tomu dispatcher.
Ak sa ale chces vyhnut synchronizacii vlakien a lockovaniu je dobre pouzivat actor model.