[ --SOULMaTe-- @ 19.02.2005. 21:52 ] @
Zdravo ljudi, treba mi savet. Koju mi knjigu preporucujete za progamiranje na paralelnim sistemima u javi? Znaci treba mi knjiga uz koju cu moci da naucim sve o koriscenju threadova u sistemima sa vise procesora i o njihovoj sinhronizaciji i komunikaciji.
Hvala unapred
[ filmil @ 19.02.2005. 23:01 ] @
Citat:
u javi? Znaci treba mi knjiga uz koju cu moci da naucim sve o koriscenju threadova u sistemima sa vise procesora i o njihovoj sinhronizaciji i komunikaciji.
Koliko sam gledao taj deo dokumentacije za Javu, ti kao programer ne vidiš kakva je mašina koja izvršava tvoj kod. Čini mi se čak da na Linuxu na primer, JVM uvek koristi samo jedan procesor, ali nisam siguran.

Na SUN-ovim mašinama je situacija pretpostavljam drugačija, ali tebi kao programeru je svejedno: jedino što imaš su primitive za sinhronizaciju koje ti Java nudi kroz ključnu reč synchronized i wait/notify metode. Niti u istoj JVM dele memoriju. Objekti su vidljivi za sve niti. Između dve različite JVM objekti mogu da komuniciraju recimo preko RMI, ali to nije jedini način.

Kako se to konkretno izvodi imaš u tutorijalima na http://java.sun.com, ali ispravno korišćenje višenitnog rada je pipava tema. Preporučujem ti da potražiš na temu Petrijevih mreža (Petri Nets), ima dosta materijala koji će ti objasniti kako se prave ispravni programi sa više niti.

f
[ sspasic @ 20.02.2005. 00:35 ] @
Citat:
Čini mi se čak da na Linuxu na primer, JVM uvek koristi samo jedan procesor, ali nisam siguran.

Mislim da ovde gresis.
Code:

ps -meo pid,cpu,user,args --sort user | grep java

u drugoj koloni prikazuje za istu JVM razlicite procesore.

[ --SOULMaTe-- @ 20.02.2005. 01:55 ] @
@filmil

Ne znam bas da li bih se slozio. Meni i jeste poenta da mi program radi distribuirano, znaci da koristi vise procesora. Tema koju treba da obradim su paralelni sistemi (parallel computing), tako da ja tacno treba da kazem koji threadovi da se izvrsavaju na kom procesoru i slicno.
[ filmil @ 20.02.2005. 13:24 ] @
Citat:
Mislim da ovde gresis.
Kao što rekoh, nisam siguran. I dalje mi se mota po glavi da sam takvo nešto pročitao. Možda se odnosilo na neku stariju verziju, ne znam. Na žalost nemam nijedan  multiprocesor pri ruci da proverim što kažeš.

f
[ filmil @ 20.02.2005. 15:20 ] @
Citat:
Ne znam bas da li bih se slozio. Meni i jeste poenta da mi program radi distribuirano, znaci da koristi vise procesora. Tema koju treba da obradim su paralelni sistemi (parallel computing), tako da ja tacno treba da kazem koji threadovi da se izvrsavaju na kom procesoru i slicno.
Ne sećam se da sam igde u Java API-ju pročitao da postoje funkcije kojima možeš da dohvatiš takve podatke.

S druge strane, ako koristiš višenitni rad, automatski otvaraš mogućnost da se tvoj program izvršava na više procesora, ukoliko su na raspolaganju. Međutim, odgovornost za raspodelu niti po procesorima je zadatak JVM odnosno operativnog sistema, a ne tvoj.

Za sve praktične primene, ako je program ispravno napisan, izvršavaće se i na jedno- i na višeprocesorskoj mašini. Ako program nije ispravno napisan (vrlo se lako dešava pri višenitnom radu!), prava multiprocesorska mašina može da izazove pojavu grešaka koje bi na uniprocesoru ostale neprimećene.

Na tvom mestu, koristio bih niti (Thread) i ne bih brinuo o raspodeli procesa. Na kraju krajeva, niti tome i služe.

Možda pomogne:
http://java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#33308

Na http://java.sun.com/j2se/1.4.2/docs/guide/jvmpi/jvmpi.html imaš opisan interfejs ka JAVA profajleru, koji se koristi da dovuče razne podatke iz same JVM, što pomaže u analizi rada programa. Ima i delova koji se odnose na pokretanje niti. Možda je to ono što ti treba.

f
[ --SOULMaTe-- @ 20.02.2005. 18:32 ] @
Cek, recimo da imam vise procesorski sistem, kako bi onda java virtualna masina znala da li ja hocu da mi se sve te niti izvrsavaju na jednom procesoru ili da se raspodele na vise?
[ DeepInBrain @ 20.02.2005. 18:57 ] @
Ispravite me ako gresim,
ali virtualne masine su upravo te koje omogucavaju kompatibilnost java aplikacija na razlicitim sistemima, sto dalje povlaci da, kad napravis jednu aplikaciju u javi, samo treba naci JVM za sistem na kojoj ona treba da proradi, bila to vise-procesorska masina ili ne!!??
JVM brine o raspodeli thread-ova po procesorima!!??
[ --SOULMaTe-- @ 20.02.2005. 19:09 ] @
Pa to jeste tacno, al to nije sporno uopste. Program ce sigurno raditi, nego mi se pitamo kako ce raditi....

Al evo nasao sam clanak u knjizi O'reilly Java Threads :

"How does the Java threading system behave in a multiprocessor system? There are no conceptual differences between a program running on a machine with one processor and a machine with two or more processors; threads behave exactly the same in either case. The real difference is that the threads actually do execute simultaneously. In Chapter 2, we discussed how the operating system switches between the list of instructions for certain threads and how that switching gave the illusion of simultaneity. On a multiprocessor system, the simultaneity is real."

Tako da ce VM sama raspodeliti threadove na vise procesora ukoliko prepozna da je u pitanju multiprocesorski sistem. Ispravite me ako sam lose zakljucio.
[ sspasic @ 20.02.2005. 19:17 ] @
JVM brine o raspodeli java thread-ova na native (tj. sistemske) thread-ove, i to radi 1:1 u novijim verzijama jave. Mislim da je ranije moglo i drugačije da se podesi (green threads, ako se ne varam) ali poslednji put kad sam proveravao ova opcija nije bila dostupna na Linux-u.

O raspodeli sistemskih threadova na različite procesore brine OS.
[ --SOULMaTe-- @ 20.02.2005. 19:29 ] @
tnx na infou svima
[ bunker @ 20.02.2005. 20:01 ] @
Debagovanje Java, David Mitchell, prevedena je na srpski, Kompjuter biblioteka, ima dobar deo o thredovima i zakljucavanju, deadlocku itd. Mislim da je dovoljno, mada sam odavno citao, ne seccam se bas.
Knjigu bolje pozajmi, ako imas gde, nego da je kupujes, necce biti dovoljna, ali je bacen fokus na to gde treba obratiti paznju (za multi treding)...
[ nidzika @ 03.03.2005. 16:21 ] @
Poslao sam ti PM u kojoj imash link sa koga mozesh skinuti knjigu Addison Wesley - Concurrent Programming in Java 2nd Ed.pdf.
[ StMilan @ 06.03.2005. 19:19 ] @
U novoj Javi 5 dodan je paket java.util.concurrent i izmenjena je JVM da podrzi CAS (compare-and-swap) instrukciju koju u nekom obliku ima vecina danasnjih procesora.
Na IBM developerworks postoji lep tutorial o novim mogucnostima za konkurentno programiranje u Javi 5 i bas su dodali puno lepih stvari. Evo linka:
http://www.ibm.com/developerworks/edu/j-dw-java-concur-i.html

java.util.concurrent je baziran na biblioteci koju je napisao Doug Lea, a sve je to opisao u knjizi Concurrent Programming in Java koja je pomenuta u prethodnom postu.

Bio bih zahvalan ako moze i meni da se prosledi link da skinem pomenutu knjigu. Hvala.
[ igyy @ 07.03.2005. 01:21 ] @
Ja sam skinuo hrpu knjiga (ne samo o Javi ) koristei mIRC, nakon što instaliras mirc izaberi mrezu "undernet", imas americki i europski ali svejedno je, kad se spojis na tu mrezu izaberi kanal "ebooks-tech" i tu imas hrpu ljudi koji ti nude download knjiga, upises u komandni promp search java i dobije popis ljudi i njihove liste knjiga...