Magaz, The Greek Linux Magazine
Magaz Logo

Επόμενο  Προηγούμενο  Περιεχόμενα

3. Μα γιατί δε μοιάζει με αυτόν που ήπια χθες; (Minor Problems)

Όσοι από μας προγραμματίζουν με :) άκρως ντετερμινιστική λογική, θα πρέπει να είναι αρκετά προσεχτικοί με την 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.

Επόμενο  Προηγούμενο  Περιεχόμενα


Valid HTML 4.01!   Valid CSS!