Επόμενο Προηγούμενο Περιεχόμενα
Όσοι από μας προγραμματίζουν με :) άκρως ντετερμινιστική
λογική, θα πρέπει να είναι αρκετά προσεχτικοί με την
Java. Όπως προαναφέραμε, πρόκειται για μια εν γένει
Threaded γλώσσα, που αφήνει το priority scheme να το
ελέγξει το λειτουργικό σύστημα.
Συνεπώς:
-
Εάν τρέξουμε ένα πρόγραμμα 10 φορές, και του δώσουμε το
ίδιο input και τις 10 φορές, αυτό ΔΕΝ ΣΗΜΑΙΝΕΙ ότι το
πρόγραμμα θα τρέξει με τον ίδιο τρόπο και τις 10 φορές.
:-)
-
Έστω ότι παίρνουμε το όμορφο προγραμματάκι μας
(koko.java) που είναι γεμάτο με threads (και γραμμένο
φυσικά κάτω από linux) και το πάμε στου φίλου μας του
Μάκη, που τρέχει winblowz98. Παρατηρούμε όμως ότι
χρειάζεται να περάσουν 3-4 δευτερόλεπτα από τότε που
πάτησε το κουμπάκι μέχρι να ανανεωθεί η όλη φόρμα...
και γεμάτοι απορία αναρωτιόμαστε τι δεν πήγε καλά...
Μια πιθανή απάντηση είναι το διαφορετικό priority
scheme που έχουν τα winblowz από το linux-ακι
(round-robin time-slicing isn't always working at its
best).
Προκειμένου να αποφύγουμε προβλήματα που προκύπτουν από
την ντετερμινιστική μας λογική :) θα ήταν προτιμότερο να
προγραμματίζουμε με ένα event-driven μοντελό στο μυαλό
(παρά με τον κλασικό σειριακό τρόπο : μετά από αυτό - θα
κάνω αυτό). Τα threads γίνονται πολύ φιλικότερα όταν
χρησιμοποιούνται σωστά :)
Ο Java Virtual Machine κάνει μια σειρά από checks πριν
τρέξει το semi-compiled κώδικα. Αυτά τα checks αφορούν
τον τρόπο με τον οποίο φορτώνονται οι classes και τα
operations που εμπεριέχονται στις methods τους. Ακόμα και
για πολύ απλά προγραμματάκια αυτή η διαδικασία είναι
πολλές φορές επίπονη. Γι΄αυτό θα συνιστούσα σε όποιον
σκέφτεται να ασχοληθεί κατά κόρον με τον προγραμματισμό
στην java, να χρησιμοποιήσει είτε compiler που βγάζει
native executable είτε να ψάξει για μηχάνημα άνω των
200mhz.
Επόμενο Προηγούμενο Περιεχόμενα