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

Razumevanje niti i visenitnosti - problem

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

Strane: 1 2

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

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 13:41 - pre 246 meseci
Citat:
NikolaVeber:
Znaci li to da upotreba niti nije neophodna za "dobro" programiranje u javi. Pod dobrim podrazumevam neki prosek elegancije, performansi it.d.


Java je jezik opšte namene što znači da se može koristiti za sve i svašta. Ne postoji tipičan ili prosečan Java program jer dok neko Javu koristi za pravljenje klijentskih aplikacije za grafičkim interfejsom drugi ga koriste za pisanje servleta ili EJB ili uopšte nekih serverskih programa koji nemaju GUI, da ne pominjem rad sa J2ME, JavaCard i slično. Znači ono "dobro programiranje" nema mnogo smisla jer se pojedini programi u Javi mogu porediti kao babe i žabe.

S druge strane, ako želiš da se ozbiljno baviš Javom onda višenitno programiranje moraš da razumeš. Da li ćeš niti koirsititi direktno ili indirektno (i koliko ćeš ih koristiti uopšte) zavisi on vrste programa koje ćeš da praviš ali pre ili kasnije ćeš naići na njih. Niti su u Javi ugrađene u sam jezik, postoji par ključnih koje su uvedene zbog niti, svaka knjiga o Javi ili Java tutorijal se bavi i njima - to nije bez razloga.

Dejan
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
199.171.112.*



+6 Profil

icon Re: Razumevanje niti i visenitnosti - problem15.01.2004. u 16:49 - pre 246 meseci
Citat:
dejankr:
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".


Govorim o npr sledećem: Niti su u Windowsu i Linuxu kernel objekti i ako kreiraš više niti na višeprocesorskoj mašini, onda će takva aplikacija da radi brže nego na mašini sa jednim procesorom ("skalira"). Međutim, na FreeBSD-u, niti su user-mode objekti (ako ćemo da cepidlačimo, postoji funkcija rfork koja pravi i kernel-mode niti, ali POSIX threads funkcije koliko znam koriste user-mode niti, a verujem da JVM poziva te funkcije a ne rfork) i možeš da dodaješ koliko hoćeš procesora - ništa ti ne vredi. Dakle, isti program pisan u Javi ili npr C++u sa Boost threads bibliotekom će na Windowsu skalirati, a na FreeBSD-u neće.

Poenta ovog mog mudrovanja je da kad su niti u pitanju često ne smemo slepo verovati portabilnim bibliotekama, već moramo znati šta se dešava ispod haube.
 
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 - problem15.01.2004. u 18:16 - pre 246 meseci
Moram da se sa ovim ne složim do kraja. Ako sam dobro zaključio, kažeš da program koji koristi user-mode niti skalira slabije od onog koji koristi kernel-mode.

To ne mora da bude tako. To što se sve niti izvršavaju u istom procesu ne mora da bude problem ako na tom kompjuteru ostali procesi ne troše mnogo vremena. Ponašanje tog procesa se na svim Unix-ima, pa pretpostavljam i na FreeBSD-u, može dodatno štelovati pomoću štelovanja 'nice value'.

Prema nekom mom iskustvu, programi koji koriste user-mode niti mogu da skaliraju drastično bolje (subjektivno iskustvo, nisam mnogo merio) ako ima puno niti i puno sinhronizacije među njima. Ovo je uglavnom zato što se izbegava većina skokova user mode/kernel mode.

Što se tiče Jave na Linux-u, do pre par verzija je postojao switch koji je birao sa kakvim se mehanizmom za niti podiže program (native/green).
A verujem da će novi 2.6 kernel ovde drastično da promeni odnos kada je koji mehanizam bolji od onog drugog, jer je jedna od ključnih novosti upravo brža implementacija pthreads.
 
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 - problem15.01.2004. u 18:20 - pre 246 meseci
Sorry - sad vidim da si mislio na skaliranje kad se dodaje više procesora :) Tu si u pravu.
Ja sam mislio na skaliranje u odnosu na broj niti.
 
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 - problem16.01.2004. u 09:13 - pre 246 meseci
Citat:
Dragi Tata:
Citat:
dejankr:
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".


Govorim o npr sledećem: Niti su u Windowsu i Linuxu kernel objekti i ako kreiraš više niti na višeprocesorskoj mašini, onda će takva aplikacija da radi brže nego na mašini sa jednim procesorom ("skalira"). Međutim, na FreeBSD-u, niti su user-mode objekti (ako ćemo da cepidlačimo, postoji funkcija rfork koja pravi i kernel-mode niti, ali POSIX threads funkcije koliko znam koriste user-mode niti, a verujem da JVM poziva te funkcije a ne rfork) i možeš da dodaješ koliko hoćeš procesora - ništa ti ne vredi. Dakle, isti program pisan u Javi ili npr C++u sa Boost threads bibliotekom će na Windowsu skalirati, a na FreeBSD-u neće.

Poenta ovog mog mudrovanja je da kad su niti u pitanju često ne smemo slepo verovati portabilnim bibliotekama, već moramo znati šta se dešava ispod haube.


Ne razumem se preterano u implementaciju niti na pojedinim operativnim sistemima (ja sam pre svega aplikativac) ali recimo da si u pravu. Međutim, poenta onog što sam ja hteo da kažem jeste da Javu ljudi koriste između ostalog zato što je portabilna. Ja razvijam programe na Windowsu 2000 a u produkciji su mi na RH Linuxu 8 i ne moram da menjam ni jedan red koda. Da Java aplikacije imaju različite performanse na različitim operativnim sistemima i platformama uopšte - to je poznata stvar i to zavisi od mnogo stvari, neke su vezane za sam operativni sistem a neke su vezane za implementaciju JVM na tom operativnom sistemu (svi znaju da je JRockit brži od Sun JVM).
Ipak, to su stvari koje se tolerišu jer imaju malo značaja za samu aplikaciju - tj. Java kod se po pravilu ne prilagođava pojedinoj platformi - to je posao JVM. Ne postoji Tomcat za Linux i Tomcat za Windows - postoji samo Tomcat koji možeš da koristiš na svim platformama. Da ne pričam o web aplikacijama koje se izvršavaju u okviru Tomcata.

Isto važi i za niti. To je deo jezika Java (više nego na primer I/O) i pre ili kasnije moraš da ih koristiš. I ako već koristiš Javu, koristiš ih na isti način za sve platforme - tj. u sklopu onoga što ti garantuje sama Java. Ako već hoćeš da pišeš kod koji je specifičan za platformu onda Java možda i nije pravo rešenje.

Znači, ne poričem ništa od ovog što si rekao, samo naglašavam da kada se radi u Javi najčešće se ne vezuješ za određeni operativni sistem.
 
Odgovor na temu

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

Strane: 1 2

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

Postavi temu Odgovori

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