Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: thread 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
-
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.
-
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
-
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
-
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í?
na niektore z tych uloh je potrebna asi aj ina znalost, ako len paralelne programovanie.
-
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í).
-
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.
-
Zkus paralelně generovat Mandelbrotovu množinu.
tak to ani neviem co je :/
-
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.
-
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
-
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.