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.