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.