Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razumevanje niti i visenitnosti - problem

[es] :: Java :: Razumevanje niti i visenitnosti - problem

Strane: 1 2

[ Pregleda: 4796 | Odgovora: 24 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

NikolaVeber
NikolaVeber
neradnik na porodiljskom bolovanju
Karlsruhe

Član broj: 5115
Poruke: 1254
*.ptt.yu

Jabber: nikolaveber@jabber.org
ICQ: 121532865


Profil

icon Razumevanje niti i visenitnosti - problem04.01.2004. u 11:52 - pre 228 meseci
Pozdrav !

U dilemi sam sto se tice razumevanja niti, tj nisam siguran da li sam stvari razumeo na pravi nacin, pa molim pomoc.

Predpostavimo da imam jednu public klasu i jos 2 pored nje, koje implementiraju Runnable. Te 2 klase rade isto sto i obicne klase, tj sasvim su normalne, sem sto umesto main() imaju run() i rade u nitima.

Razlika prilikom pozivanja "normalinih" i klasa koje impl. runnable je u tome sto u prvom slucaju imam new klasa1 i cekam da se zavrse sve metode koje su pozvane iz main() pre nego sto se izvrsi new klasa2, a prilikom
Code:

Runnable x = new Klasa1();
Thread nit1 = new Thread(x);
Runnable y = new Klasa2();
Thread nit2 = new Thread(x);

se te dve klase (tj njihove metode) izvrsavaju paralelno, ili kako je vec definisano odnosima izmedju niti.

Da li sam u pravu ?
Pop Servis "Paradise Tours"
Java User Group Karlsruhe
IT Dan - Srbija

Officer, I saw the driver who hit me - his name was Johnny Walker.
 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 8892
*.yubc.net



+10067 Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 09:19 - pre 228 meseci
Hm ... Sudeci po konfuznosti pitanja, nista ti nije jasno. I prilicno gresis.
Ali, dobro, ja sam verovatno bio jos gori !

Znam da si stavio navodnike za "normalne" klase, ali moras i u nacinu razmisljanja da te klase shvatis kao normalne. (bez navodnika). Sve su klase normalne.

Implementacija Runnable interfejsa vodi do toga da se mora deklarisati public void run() metod. Deo koda koji se nalazi u toj metodi izvrsavace se paralelno sa izvrsavanjem nekog drugog koda.

Takodje vidim da mesas main() metod i konstruktor. Konstruktor nije main() !

U delu koda koji si naveo sve ce se metode izvrsavati linearno. Dakle, po zavrsetku prve linije ide se na drugu i tako redom. To sto klasa nasledjuje Runnable ne znaci da ce se njen konstruktor (inicijalizacija) izvrsavati u posebnom threadu. (Osim ako se iz konstruktora ne pozove start() )

Ajde, pitaj jos nesto, nisam siguran da li ti je jasnije.
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

weB_KiLeR

Član broj: 238
Poruke: 1317
*.air.tehnicom.net



Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 12:07 - pre 228 meseci
Imas ovde lep tutorial kako se radi sa thread-ovima...
http://www.oreilly.com/catalog/jthreads2/
Imas to objasnjeno i u mom tutorailu za sockete u javi.
 
Odgovor na temu

NikolaVeber
NikolaVeber
neradnik na porodiljskom bolovanju
Karlsruhe

Član broj: 5115
Poruke: 1254
*.rz.uni-karlsruhe.de

Jabber: nikolaveber@jabber.org
ICQ: 121532865


Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 12:29 - pre 228 meseci
Ok, posle sam citao o razlici izmedju main() i konstruktora.
Nego kada klasa implementira runnable, kada se napravi objekat te klase krece sa izvrsavanjem konstruktor. Kako da sada to smestim u novu nit ?
Odnosno, kako da pobegnem iz osnovne niti (u kojoj je zapocela izvrsavanja main() public klase)?
Pop Servis "Paradise Tours"
Java User Group Karlsruhe
IT Dan - Srbija

Officer, I saw the driver who hit me - his name was Johnny Walker.
 
Odgovor na temu

tweeester
Ivan Arandjelovic
bg yu

Član broj: 724
Poruke: 882
*.kc.vicert.com

Sajt: www.javasvet.net


Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 13:23 - pre 228 meseci
Code:

Runnable x = new Klasa1();
Thread nit1 = new Thread(x);
nit1.start();       // Od ovog momenta x.run() se izvrsava paralelno sa ostatkom ovog koda
Runnable y = new Klasa2();
Thread nit2 = new Thread(x);
nit2.start();        // Sad postoji jos jedna nit ..... (tri ukupno, osim ako se nit1 vec nije zavrsila)

<< tko leti vrijedi, tko ne leti ne vrijedi >>
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.231.216.81.gus.vf.siwnet.net

Sajt: dejan.lekic.org


+2 Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 13:47 - pre 228 meseci
Princip multithread programiranja je veoma prost. Kad se nit kreira ona radi nezavisno, totalno nezavisno, tako da tu nema price "pobegnem iz niti X u nit Y", ne postoji direktni mehanizam za tako nesto. Radi se o koncepciji, covek moze da "naredi" niti X da ceka da se nit Y zavrsi, moze da je zaustavi, moze da joj posalje signale, i slicno. Na ovaj nacin covek moze lako da sinhronizuje niti. Primera na NET-u imas na milione.
Dakle, ne postoji nacin da "skocis" iz niti X u nit Y. Konkurentno programiranje je poseban koncept, da bi to savladao moras malo da sednes, i lagano shvatis taj koncept. Ovako ces samo lutati u mraku...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

NikolaVeber
NikolaVeber
neradnik na porodiljskom bolovanju
Karlsruhe

Član broj: 5115
Poruke: 1254
*.rz.uni-karlsruhe.de

Jabber: nikolaveber@jabber.org
ICQ: 121532865


Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 16:38 - pre 228 meseci
Citao sam dosta o tome (smesno zvuci) i donekle razumem princip rada niti. Samo me zbunjuje njihova konkretna primena (profesionalna deformacija proceduralnog programera:D)
Moze li neki prost primer, "iz svakodnevnog zivota", gde je upotreba niti neophodna (ili bolja od njene neupotrebe)?
Pop Servis "Paradise Tours"
Java User Group Karlsruhe
IT Dan - Srbija

Officer, I saw the driver who hit me - his name was Johnny Walker.
 
Odgovor na temu

tweeester
Ivan Arandjelovic
bg yu

Član broj: 724
Poruke: 882
*.kc.vicert.com

Sajt: www.javasvet.net


Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 16:58 - pre 228 meseci
Pa evo jedan primer iz relalnog zivota gde se koriste niti. Primer je neka aplikacija koja sadrzi par podsistema/modula (naprimer nekoliko klasa koje rade svaka svoj posao). Svaka od njih moze da ispali neke event-e koji su od interesa ostalim modulima. Event-e prima srce sistema (nazovimo ga kernel) koji ih smesta u queue (FIFO) i odmah se vraca iz funkcije da bi modul mogao nesmetano odmah da nastavi dalje. E sad tu u igru ulazi jedan low-priority thread koji event-e iz tog queue-a polako salje svim ostalim modulima na procesiranje. Prost primer ali nadam se da malo ilustruje potrebe za nitima
<< tko leti vrijedi, tko ne leti ne vrijedi >>
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.231.216.81.gus.vf.siwnet.net

Sajt: dejan.lekic.org


+2 Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 17:12 - pre 228 meseci
U principu svaki client/server softver je bolje raditi pomocu niti. Najprostiji primer za ovu pricu je web server i web klijenti. Kad god se klijent uspesno konektuje na web server, ovaj kreira NIT koja ce da "usluzuje" klijenta, tj. da mu servira informacije.
Zasto je ovo bolje od nekog drugog nacina? - Zato jer je sam proces serviranja informacija klijentu X totalno nezavistan od serviranja informacija klijentu Y. I to je savrseno mesto gde treba koristiti niti. Drugo, niti su, kada covek gleda na resurse, "najjeftiniji" . Ne rezervisu mnogo prostora na heap-u i dele resurse medjusobno. Covek moze da kreira par hiljada niti koje nesto rade a da procesor i dalje "zivi"...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

weB_KiLeR

Član broj: 238
Poruke: 1317
*.air.tehnicom.net



Profil

icon Re: Razumevanje niti i visenitnosti - problem08.01.2004. u 20:47 - pre 228 meseci
Citat:
leka:
U principu svaki client/server softver je bolje raditi pomocu niti. Najprostiji primer za ovu pricu je web server i web klijenti. Kad god se klijent uspesno konektuje na web server, ovaj kreira NIT koja ce da "usluzuje" klijenta, tj. da mu servira informacije.
Zasto je ovo bolje od nekog drugog nacina? - Zato jer je sam proces serviranja informacija klijentu X totalno nezavistan od serviranja informacija klijentu Y. I to je savrseno mesto gde treba koristiti niti. Drugo, niti su, kada covek gleda na resurse, "najjeftiniji" . Ne rezervisu mnogo prostora na heap-u i dele resurse medjusobno. Covek moze da kreira par hiljada niti koje nesto rade a da procesor i dalje "zivi"...


Sto znaci da bez razumevanja thread-ova nema socket programiranja svaki iole slozeniji program moram imati niti kako bi na primer citao kroz socket i pisao u isto vreme... Ako ih nemas program ce da pukne ili da zablokira.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.231.216.81.gus.vf.siwnet.net

Sajt: dejan.lekic.org


+2 Profil

icon Re: Razumevanje niti i visenitnosti - problem09.01.2004. u 03:17 - pre 228 meseci
Citat:
Sto znaci da bez razumevanja thread-ova nema socket
programiranja

Sa ovim se nikako ne bih slozio - ima na stotine hiljada mreznih
programa koji ne koriste niti. Umesto niti se forkuju procesi kada treba
da se usluzi klijent... Ovako se to radi(lo) godinama, a i danas danji
zato jer je sama stvar (mnogo) prostija nego rad sa nitima.

Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

tweeester
Ivan Arandjelovic
bg yu

Član broj: 724
Poruke: 882
*.kc.vicert.com

Sajt: www.javasvet.net


Profil

icon Re: Razumevanje niti i visenitnosti - problem09.01.2004. u 08:49 - pre 228 meseci
Leka ocigledno nije javadzija (bez uvrede) Slazem se sa njegovim misljenjem kad je Linux u pitanju ali za Win i Java programiranje threads su jedini logican izbor.
<< tko leti vrijedi, tko ne leti ne vrijedi >>
 
Odgovor na temu

NikolaVeber
NikolaVeber
neradnik na porodiljskom bolovanju
Karlsruhe

Član broj: 5115
Poruke: 1254
*.rz.uni-karlsruhe.de

Jabber: nikolaveber@jabber.org
ICQ: 121532865


Profil

icon Re: Razumevanje niti i visenitnosti - problem09.01.2004. u 18:55 - pre 228 meseci
Da li t oznaci da su na linuxu slabije performanse? Ili je samo u pitanju prednost linuxa?
Pop Servis "Paradise Tours"
Java User Group Karlsruhe
IT Dan - Srbija

Officer, I saw the driver who hit me - his name was Johnny Walker.
 
Odgovor na temu

dejankr
Dejan Krsmanovic
JavaEE programer
Beograd

Član broj: 7842
Poruke: 384
*.3.EUnet.yu



+1 Profil

icon Re: Razumevanje niti i visenitnosti - problem09.01.2004. u 20:45 - pre 228 meseci
Kada se radi nešto u Javi, operativni sistem i platforma ne treba da budu važni (kod ne treba da bude specifičan za operativni sistem) pa mislim da pozivanje procesa ne treba da bude opcija kada se radi sa Javom. Tako da dodajem, da bez obzira koji operativni sistem/platforma se koristi ozbiljan JAVA program koji radi sa socketima nema smisla bez upotrebe niti.
Uostalom, SocketServer klasa koja se u Javi koristi pri radu sa Socketima blokira tekuću nit, a ako ne želiš da ti za to vreme cela aplikacija bude blokirana moraš da imaš makar još jednu nit. non-blocking konekcije su podržane tek od verzije 1.4, ali malo koji serverski program je pisan baš za Javu 1.4.

Na kraju krajeva programiranje sa nitima u Javi i nije neki problem u poređenju sa nekim starijim programskim jezicima, s obzirom da je podrška za niti ugrađena u sam jezik.
 
Odgovor na temu

tweeester
Ivan Arandjelovic
bg yu

Član broj: 724
Poruke: 882
*.kc.vicert.com

Sajt: www.javasvet.net


Profil

icon Re: Razumevanje niti i visenitnosti - problem13.01.2004. u 10:32 - pre 228 meseci
Citat:
NikolaVeber:
Da li t oznaci da su na linuxu slabije performanse? Ili je samo u pitanju prednost linuxa?


Cisto informativno: Java thread je na Linux-u implementiran kao novi proces (logicno) a and Win kao novi thread.
<< tko leti vrijedi, tko ne leti ne vrijedi >>
 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Razumevanje niti i visenitnosti - problem13.01.2004. u 10:55 - pre 228 meseci
Pretpostavljam da si ovo zaključio na osnovu toga što se Java Thread pojavljuje u listi procesa na Linux-u. To je pre posledica načina na koji su niti implementirane na samom Linux-u (clone sistemski poziv). Ipak je bliže istini da je Java Thread na linux-u implementiran kao thread nego kao proces.
 
Odgovor na temu

tweeester
Ivan Arandjelovic
bg yu

Član broj: 724
Poruke: 882
*.kc.vicert.com

Sajt: www.javasvet.net


Profil

icon Re: Razumevanje niti i visenitnosti - problem13.01.2004. u 11:54 - pre 228 meseci
Sasvim moguce ...
<< tko leti vrijedi, tko ne leti ne vrijedi >>
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Razumevanje niti i visenitnosti - problem14.01.2004. u 18:20 - pre 227 meseci
U principu, niti su na raznim operativnim sistemima različita stvar i zato je pomalo opasno koristiti neke "portabilne" biblioteke za rad sa nitima (Java, pthreads, Boost Threads) i smatrati da će tako napisani programi svuda da rade isto.

Uzgred, poslednji put kad sam proveravao Java nije imala podršku za thread pools u standardnoj biblioteci. Je li u međuvremenu urađeno nešto po tom pitanju?
 
Odgovor na temu

dejankr
Dejan Krsmanovic
JavaEE programer
Beograd

Član broj: 7842
Poruke: 384
195.178.47.*



+1 Profil

icon Re: Razumevanje niti i visenitnosti - problem15.01.2004. u 09:23 - pre 227 meseci
Citat:
Dragi Tata:
U principu, niti su na raznim operativnim sistemima različita stvar i zato je pomalo opasno koristiti neke "portabilne" biblioteke za rad sa nitima (Java, pthreads, Boost Threads) i smatrati da će tako napisani programi svuda da rade isto.

Uzgred, poslednji put kad sam proveravao Java nije imala podršku za thread pools u standardnoj biblioteci. Je li u međuvremenu urađeno nešto po tom pitanju?


Da se niti na različitim operativnim sistemima ne ponašaju potpuno isto - tu se slažem. Ipak, za stvari za koje se obično u Javi koirste niti mislim da nema nikakvih problema sa time i ne vidim zašto se ne bi koristile. Java vrši apstrakciju onoga što operativni sistem pruža, a sama JVM koja je specifična za svaki operativni sistem će obavljati "prljav posao".
Istina je da je rad sa nitima, ma koliko ga Java olakšala, i dalje prilično mukotrpan posao. Bagovi koji nastaju kao posledica nesinhronizacije pa i deadlockovi se jako teško otkrivaju, i dešava se da aplikacija radi nedeljama i mesecima dok se problem ne ispolji. Ipak za mnoge probleme nema izbora, tako da na primer rad sa servletima podrazumeva da pišete thread safe kod.

A što se tiče thread pool-ova oni još uvek nisu deo JDK. Mada mi se čini da sam čuo da će Tiger (JDK 1.5) uključiti i thread poolove i neke druge korisne stvari za rad sa nitima.
 
Odgovor na temu

NikolaVeber
NikolaVeber
neradnik na porodiljskom bolovanju
Karlsruhe

Član broj: 5115
Poruke: 1254
*.dip.t-dialin.net

Jabber: nikolaveber@jabber.org
ICQ: 121532865


Profil

icon Re: Razumevanje niti i visenitnosti - problem15.01.2004. u 12:12 - pre 227 meseci
Znaci li to da upotreba niti nije neophodna za "dobro" programiranje u javi. Pod dobrim podrazumevam neki prosek elegancije, performansi it.d.
Pop Servis "Paradise Tours"
Java User Group Karlsruhe
IT Dan - Srbija

Officer, I saw the driver who hit me - his name was Johnny Walker.
 
Odgovor na temu

[es] :: Java :: Razumevanje niti i visenitnosti - problem

Strane: 1 2

[ Pregleda: 4796 | Odgovora: 24 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.