Προγραμματισμός

Νήματα Java: Μια συγκριτική κριτική βιβλίου

Από τις πρώτες εκδόσεις του Νήματα Java από τους O'Reilly και Ταυτόχρονος προγραμματισμός στην Java από την Addison-Wesley βγήκε πριν από αρκετά χρόνια, τα συνιστούσα σε άτομα που θέλουν να μάθουν να χρησιμοποιούν νήματα. Με πολλά ανταγωνιστικά βιβλία, και δεύτερες εκδόσεις των πρωτοτύπων, τώρα διαθέσιμες, αποφάσισα να επανεκτιμήσω τις προτάσεις μου. Σε αυτό το άρθρο, θα εξετάσω έξι από τα τελευταία βιβλία προγραμματισμού νήματος Java.

Τα έξι βιβλία που εξετάστηκαν είναι:

  1. Java Threads, Δεύτερη Έκδοση, Scott Oaks και Henry Wong (O'Reilly)
  2. Ταυτόχρονος προγραμματισμός σε Java, Δεύτερη Έκδοση, Ντουγκ Λέα (Addison-Wesley)
  3. Επεξεργασία νημάτων Java, Allen Holub (Apress)
  4. Προγραμματισμός νήματος Java, Πολ Χάιντ (Σαμς)
  5. Πολυνηματικός προγραμματισμός με τεχνολογία Java, Bil Lewis και Daniel Berg (Prentice Hall, Sun Press)
  6. Υψηλής απόδοσης Java Platform Computing: Προγραμματισμός πολλαπλών νημάτων και δικτύων, Thomas Christopher και George Thiruvathukal (Prentice Hall, Sun Press)

Ο παρακάτω πίνακας παρέχει μια γρήγορη ανασκόπηση των βασικών χαρακτηριστικών των έξι βιβλίων.

Όλα τα βιβλία βασίζονται στην έκδοση 1.2.x της πλατφόρμας Java 2.
Επισκόπηση βιβλίων νημάτων
 Νήματα JavaΤαυτόχρονος προγραμματισμόςΕπεξεργασία νημάτων JavaΠρογραμματισμός νήματος JavaΠρογραμματισμός πολλαπλών νημάτωνΥψηλή απόδοση Java
Τιμή2.959.954.954.999.999.99
Σύνολο σελίδων320410300510460410
CD-ROM / Πηγή από το WebΟχι ΝαιΟχι ΝαιΟχι ΝαιΟχι ΝαιΟχι ΝαιΟχι Ναι
Βασικά θέματαΕξοχοςΕκθεσηΚανέναςΕξοχοςΕξοχοςΕκθεση
ΤεχνικέςΠολύ καλάΚαλόςΠολύ καλάΕξοχοςΚαλόςΠολύ καλά
Σχεδιαστικά πρότυπαΚανέναςΕξοχοςΦτωχόςΚανέναςΚανέναςΚαλός
Κλίμακα: Καμία, Κακή, Μέση, Καλή, Πολύ καλή, Εξαιρετική

Ο πίνακας πρέπει να είναι αρκετά αυτονόητος μέχρι το χαρακτηριστικό CD-ROM. Επιτρέψτε μου να εξηγήσω περαιτέρω τις τελευταίες σειρές:

  • Το χαρακτηριστικό Thread Basics δείχνει το βαθμό στον οποίο τα βιβλία περιγράφουν τι είναι ένα νήμα και πώς να το χρησιμοποιήσετε: περιγράφοντας το Νήμα τάξη και Τρέξιμο διεπαφή, το Αντικείμενο μεθόδους του Περίμενε(), κοινοποιώ(), και ειδοποίησηΌλα (), και το συγχρονισμένος λέξη-κλειδί.
  • Το χαρακτηριστικό Techniques αξιολογεί πόσο καλά τα βιβλία διερευνούν τεχνικές στη χρήση νημάτων.
  • Το χαρακτηριστικό Design Patterns μετρά την εξήγηση των βιβλίων σχετικά με τον τρόπο δημιουργίας προγραμματισμού βάσει νήματος ακολουθώντας καλά καθορισμένα σχέδια σχεδίασης.

Στη συνέχεια, θα εξετάσω κάθε βιβλίο. Δίπλα στον τίτλο κάθε βιβλίου υπάρχει μια βαθμολογία με αστέρια, με βάση την περιοχή κάλυψης νήματος στην οποία το βιβλίο ισχυρίζεται ότι επικεντρώνεται, όχι μόνο ένας μέσος όρος των τριών χαρακτηριστικών που αναφέρονται παραπάνω. Ένα αστέρι δείχνει κακή δουλειά. η υψηλότερη βαθμολογία (πέντε αστέρια) καθορίζει εξαιρετική κάλυψη.

Νήματα Java

Η πρώτη έκδοση του Νήματα Java, από τους Scott Oaks και Henry Wong, ήταν ο αρχικός οριστικός πόρος για την εκμάθηση προγραμματισμού με θέματα. Ενώ τα περισσότερα εισαγωγικά βιβλία πέρασαν από τι ήταν το νήμα και πώς να το χρησιμοποιήσετε Νήμα τάξη με το Τρέξιμο διεπαφή, Νήματα Java παρείχε τις πρόσθετες πληροφορίες που απαιτούνται για την αποτελεσματική χρήση τους. Η δεύτερη έκδοση ακολουθεί τα βήματά της: περιλαμβάνει ενημερωμένες πληροφορίες σχετικά με τη χρήση νημάτων με την πλατφόρμα Java 2, πληροφορίες σχετικά με τα καταργημένα API, τη διακοπή I / O και τις αλλαγές ασφαλείας Java 2. Το βιβλίο καλύπτει επίσης ζητήματα πολλαπλών νημάτων με το σύνολο στοιχείων Swing και παρέχει βοήθεια με εγγενή υποστήριξη προγραμματισμού και εργασία με μηχανήματα πολλαπλών επεξεργαστών.

Εάν είστε νέοι στον προγραμματισμό Java και δεν έχετε ακόμη κατακτήσει νήματα, Νήματα Java είναι ένας εξαιρετικός πόρος. Θα ρίξετε μια ματιά στα βασικά του Java threading και θα μάθετε τις τεχνικές που είναι απαραίτητες για να λειτουργούν σωστά τα προγράμματά σας σε έναν κόσμο πολλαπλών νημάτων.

Ταυτόχρονος προγραμματισμός στην Java

Ενώ Νήματα Java εξηγεί τις λεπτομέρειες χαμηλού επιπέδου χρήσης του Threads API, Ταυτόχρονος προγραμματισμός στην Java, από τον Doug Lea, διερευνά τον σωστό σχεδιασμό πολυνηματικών προγραμμάτων. Η γνώση του τρόπου χρήσης του API δεν επαρκεί στον κόσμο της Java. Θα πρέπει επίσης να ξοδέψετε το χρόνο και την ενέργεια για να κάνετε το σχεδιασμό του προγράμματος σας σωστό. Σε αυτό το φως, Ταυτόχρονος προγραμματισμός είναι κυρίως ένα βιβλίο με σχέδια σχεδίασης. Λαμβάνοντας υπόψη ένα συγκεκριμένο πρόβλημα, μπορείτε να αναζητήσετε το μοτίβο που ορίζεται στο βιβλίο και το πρόγραμμά σας γράφει πρακτικά.

Ταυτόχρονος προγραμματισμός χωρίζεται σε τέσσερις περιοχές που περιγράφουν διαφορετικά μοτίβα χρήσης. Η ενότητα "Ταυτόχρονος αντικειμενοστρεφής προγραμματισμός" ξεκινά με τα βασικά. Η ενότητα "Εξαίρεση" περιγράφει μοτίβα για τη χρήση του συγχρονισμένος λέξη-κλειδί. Το "State Dependence" διερευνά ζητήματα και μοτίβα για τη χρήση του Περίμενε(), κοινοποιώ(), και ειδοποίησηΌλα () μέθοδοι του Αντικείμενο τάξη. Η τελευταία ενότητα, "Δημιουργία νημάτων", αφορά μοτίβα για τη χρήση του Νήμα τάξη.

Αυτό το βιβλίο εξυπηρετεί σίγουρα τον προχωρημένο χρήστη και δεν είναι για τον εξασθενημένο της καρδιάς. Αναμένεται να έχετε καλή κατανόηση του αντικειμενοστρεφούς προγραμματισμού και της γλώσσας προγραμματισμού Java, και να μην έχετε μόνο στον τομέα του σχεδιασμού προγραμμάτων για ζητήματα ταυτότητας. Εκτός από το βιβλίο, η Lea κάνει τη βιβλιοθήκη util.concurrent διαθέσιμη δωρεάν στον ιστότοπο του βιβλίου. (Δείτε τους πόρους για έναν σύνδεσμο.) Η βιβλιοθήκη θα σας βοηθήσει να σχεδιάσετε και να αναπτύξετε πολυνηματικά προγράμματα.

Επεξεργασία νημάτων Java

Ο Άλεν Χολούμπ Επεξεργασία νημάτων Java, προήλθε εδώ στις JavaWorld ως μια σειρά εργαλείων Java εννέα μερών. Τα άρθρα έχουν έκτοτε ενημερωθεί και αποτελούν πλέον το περιεχόμενο του βιβλίου, μαζί με ένα ενδιαφέρον νέο κεφάλαιο που περιγράφει τα προβλήματα με το Java threading API. (Δείτε τους πόρους για έναν σύνδεσμο προς αυτήν την ενότητα, με τίτλο "Αν ήμουν βασιλιάς.") Εξημέρωση είναι σε αντίθεση με τα δύο πρώτα βιβλία που εξέτασα. αφορά αυστηρά τις τεχνικές για τη σωστή χρήση του API. Δεν είναι μια εισαγωγή στα νήματα ή ένα βιβλίο με σχέδια σχεδίων. Μια βιβλιοθήκη κώδικα (βλ. Πόροι για έναν σύνδεσμο) είναι επίσης διαθέσιμη, ώστε να μπορείτε να επωφεληθείτε από όσα έχετε μάθει. Φροντίστε να διαβάσετε τη συμφωνία άδειας χρήσης, ωστόσο. δεν είναι δημόσιος τομέας ή ανοιχτός κώδικας.

Αφού περιγράφει τη βασική αρχιτεκτονική του μοντέλου πολλαπλών νημάτων της Java, ο Holub εξηγεί τους κινδύνους της χρήσης νημάτων και τεχνικών για ασφαλή χρήση τους. Θα μάθετε να δημιουργείτε και να χρησιμοποιείτε σίγαση, σηματοφόρους και μεταβλητές υπό όρους. Θα εξοικειωθείτε με τις διαφορές μεταξύ των Swing's invokeLater () και invokeAndWait () μεθόδους. Ο Holub διερευνά επίσης το AWTEventMulticaster τάξη και δείχνει πώς είναι ασφαλές για νήματα με ελάχιστη επιβάρυνση και πώς μπορείτε να εργαστείτε με ομάδες νήματος. Αφού όλα έχουν ειπωθεί και γίνει, θα έχετε μια εξαιρετική αντίληψη για τους περιορισμούς και τη χρήση του μοντέλου Java threading.

Ήμουν έκπληκτος που είδα κάποια τεχνικά λάθη στο βιβλίο - στον πρόλογο, όχι λιγότερο - αλλά δεν μειώνει τις εξαιρετικές πληροφορίες που προσφέρει το βιβλίο. Ωστόσο, αφού έβλεπα συνεχώς τον κώδικα Java μορφοποιημένο με μικτή θήκη, με εξέπληξε λίγο που ο κώδικας του Holub μορφοποιήθηκε με τον χαρακτήρα υπογράμμισης μεταξύ λέξεων σε μεταβλητές και ονομάτων μεθόδων. Ίσως χρειαστεί να διαβάσετε τον αποκλεισμό κώδικα πολλές φορές προτού τους κατανοήσετε πλήρως, αλλά η ποιότητα των πληροφοριών που παρέχονται εδώ αξίζει την ενόχληση. Μια τελευταία σημείωση: όλος ο πηγαίος κώδικας σχολιάζεται πλήρως από το javadoc.

Προγραμματισμός νήματος Java

Προγραμματισμός νήματος Java, από τον Paul Hyde, ανταγωνίζεται άμεσα Νήματα Java. Στοχεύει ξεκάθαρα τον αρχάριο προγραμματιστή και περιλαμβάνει πρόσθετη κάλυψη σε πιο προηγμένα θέματα και τεχνικές για το πότε θα μεγαλώσει αυτός ο προγραμματιστής. Αυτό το βιβλίο είναι το μεγαλύτερο μέρος της δέσμης και ο χώρος χρησιμοποιείται σωστά.

Το πρώτο μισό του Προγραμματισμός νήματος Java εξηγεί τι είναι τα νήματα και πώς να εργαστείτε με τα βασικά. Παίρνετε την τυπική περιγραφή της δημιουργίας νημάτων και της χρήσης του Τρέξιμο διεπαφή. Υπάρχει ένα κεφάλαιο για το πώς να σταματήσετε τα νήματα, συμπεριλαμβανομένου του τρόπου αναστολής και επαναφοράς τους χωρίς να χρησιμοποιήσετε τις καταργημένες μεθόδους - ωραίες τεχνικές για την αύξηση της παραγωγικότητας. Εκτός από την κάλυψη Περίμενε() και κοινοποιώ(), Ο Χάιντ περιγράφει λεπτομερώς το πτητικός επικοινωνία λέξεων-κλειδιών και ενδιάμεσων νημάτων μέσω σωλήνων I / O. Προγραμματισμός νήματος Java έχει επίσης την καλύτερη κάλυψη του Νήμα τοπικά και InheritableThreadLocal τάξεις, εκτός από τη συνήθη κάλυψη των νημάτων και Swing που βρίσκονται σε άλλα βιβλία.

Μέρος 2 του Προγραμματισμός νήματος Java περιγράφει τεχνικές εργασίας με νήματα Java. Προσφέρει την καλύτερη κάλυψη νήματος και ένα εξαιρετικό κεφάλαιο για το ξέσπασμα του αποκλεισμένου I / O. Δεν θα απογοητευτείτε με αυτήν την επιλογή.

Πολυνηματικός προγραμματισμός με τεχνολογία Java

Φαίνεται να βρίσκω πάντα τουλάχιστον ένα βιβλίο που δεν μοιάζει πολύ με τα άλλα - Πολυνηματικός προγραμματισμός με τεχνολογία Java, από τον Bil Lewis και τον Daniel Berg, είναι ένα τέτοιο θηρίο. Το έδωσα ακόμα μια βαθμολογία με αστέρια, αλλά αυτό το βιβλίο αξίζει ιδιαίτερη αναφορά. Κατά τη γνώμη μου, Προγραμματισμός πολλαπλών νημάτωνΟ πρωταρχικός σκοπός δεν είναι να σας διδάξει να προγραμματίζετε με νήματα στην Java. Θα σας βοηθήσει σε αυτήν την περιοχή, αλλά ο πρωταρχικός σκοπός του φαίνεται να είναι να σας διδάξει πώς λειτουργεί η βασική αρχιτεκτονική νημάτων, τόσο εντός της Java Virtual Machine (Java VM) όσο και των υποκείμενων λειτουργικών συστημάτων. Στην πραγματικότητα, δεν λαμβάνετε μόνο πολλά από τα παραδείγματα κώδικα του βιβλίου σε κώδικα Java, αλλά επίσης λαμβάνετε κώδικα και κώδικα POSIX για το χειρισμό νήματος API Win32. Εάν υπήρχαν ασκήσεις αναγνώστη στο τέλος κάθε κεφαλαίου, αυτό θα λειτουργούσε καλά ως κείμενο του κολλεγίου.

Ωστόσο, πόσο καλά το κάνει Προγραμματισμός πολλαπλών νημάτων να σας διδάξει πώς να χρησιμοποιήσετε νήματα; Μοιάζει περισσότερο Νήματα Java; κύριος στόχος του είναι να σας διδάξει τι είναι ένα νήμα και πώς να το χρησιμοποιήσετε. Δείχνει επίσης πώς λειτουργούν όλα κάτω από την κουκούλα στο Java VM, πώς όλα προγραμματίζονται στο Java VM και ούτω καθεξής. Επιπλέον, λαμβάνετε κάλυψη τυπικών θεμάτων με θέματα όπως συγχρονισμός, αδιέξοδα και συνθήκες αγώνα. Οι Lewis και Berg καλύπτουν ακόμη και θέματα νήματος με RMI και τεχνικές βελτιστοποίησης για τη βελτίωση της απόδοσης. Συνολικά, αυτό είναι ένα καλό βιβλίο - απλώς δεν είναι η τυπική παρουσίαση των νημάτων Java.

Όσον αφορά τα παραδείγματα του βιβλίου, προσέξτε τον Έλβις να πιαστεί από τα UFO.

Υπολογιστική πλατφόρμα Java υψηλής απόδοσης

Το check in με τον μεγαλύτερο τίτλο είναι Υψηλής απόδοσης Java Platform Computing: Προγραμματισμός πολλαπλών νημάτων και δικτύων, των Thomas Christopher και George Thiruvathukal. Ακόμα και τα επώνυμα των συγγραφέων είναι τουλάχιστον διπλάσια από το μήκος του διαγωνισμού τους! Η περίσσεια δεν σταματά εκεί. αυτό το βιβλίο κοστίζει επίσης πάνω από 25 τοις εκατό περισσότερο από τα άλλα.

Αρκετά για το εξωτερικό - τι είναι μέσα; Υψηλή απόδοση πηδά κατευθείαν σε μια συζήτηση για παράλληλους υπολογιστές. Θα μάθετε για τη μηχανή von Neumann, την ταξινόμηση του Flynn, τη γραμμική επιτάχυνση και τον νόμο του Amdahl, όλα στο Κεφάλαιο 1. Το Κεφάλαιο 2 διερευνά τη δημιουργία νήματος σε μεγαλύτερο βάθος από τις περισσότερες εισαγωγές στο API. Μετά από μια επίδειξη των συνθηκών αγώνα, το Κεφάλαιο 3 συζητά το συγχρονισμό και γιατί το χρειάζεστε. Το Κεφάλαιο 4 ερευνά βαθιά τις οθόνες, με πολλές παραλλαγές στα προβλήματα κλειδώματος αναγνώστη-συγγραφέα. Στο Κεφάλαιο 5, οι συγγραφείς συζητούν τη χρήση της κοινόχρηστης μνήμης - στο σωρό, όχι στην ποικιλία του συστήματος Unix - όλα με σκοπό να έχουν ένα νήμα. Το υπόλοιπο βιβλίο καλύπτει μοτίβα για την ανάπτυξη εφαρμογών για παράλληλη εκτέλεση.

Υπάρχουν πολλές καλές πληροφορίες εδώ για τον παράλληλο υπολογισμό, αλλά Υψηλή απόδοση'Ο στόχος δεν είναι πραγματικά η διδασκαλία προγραμματισμού νημάτων γενικής χρήσης. Φαίνεται ότι αναπτύχθηκε κυρίως ως κείμενο για ένα παράλληλο μάθημα υπολογιστών - κάθε κεφάλαιο τελειώνει με μια σειρά στοχαστικών ασκήσεων, στις οποίες δεν κατάφερα να βρω απαντήσεις.

Συνιστώ το ίδιο;

Οι πρώτες εκδόσεις του Ταυτόχρονος προγραμματισμός στην Java και Νήματα Java βγήκε το 1997 και προτάθηκε ιδιαίτερα. Συνιστώ απλώς τυφλά τις δεύτερες εκδόσεις τους; Εν ολίγοις, φαίνεται ότι το Lea's Ταυτόχρονος προγραμματισμός εξακολουθεί να είναι ένας εξαιρετικός πόρος για όσους μαθαίνουν να σχεδιάζουν προγράμματα για τον κόσμο με πολλά νήματα. Δεν είναι εύκολο να διαβαστεί, αλλά τα σχέδια και οι τεχνικές που εξηγούνται στο βιβλίο είναι εξαιρετικά εργαλεία για σοβαρούς προγραμματιστές Java.

Από την άλλη πλευρά, εμφανίζεται Νήματα Java διαδέχτηκε ο Sams's Προγραμματισμός νήματος Java ως το καλύτερο βιβλίο για αρχάριους. Τίποτα δεν είναι τεχνικά λάθος με την προσφορά O'Reilly, αλλά Προγραμματισμός νήματος Java λειτουργεί καλύτερα ως εισαγωγή στα νήματα Java. Η Hyde ξεπερνά ακόμη και το εισαγωγικό υλικό, προσφέροντας πιο προηγμένες τεχνικές για ένα επιπλέον.

Εάν έχετε τις πρώτες εκδόσεις του Νήματα Java και Ταυτόχρονος προγραμματισμός στην Java, αξίζουν οι ενημερώσεις; Θα συνιστούσα να πάρετε τη δεύτερη έκδοση της Lea και να συνεχίσετε Νήματα Java. Εάν έχετε την πρώτη έκδοση του Νήματα Java, πιθανότατα έχετε προχωρήσει πέρα ​​από την ανάγκη για δεύτερο τώρα. Εάν εξακολουθείτε να χρειάζεστε ένα εισαγωγικό κείμενο, πάρτε το Sams's Προγραμματισμός νήματος Java αντι αυτου.

Τι να κάνω με τα υπόλοιπα; Είναι πραγματικά μια δύσκολη κλήση και εξαρτάται από την δεκάρα που ξοδεύετε. Εάν μπορούσα να πάρω μόνο ένα ακόμη νήμα, θα το επέλεγα Πολυνηματικός προγραμματισμός με τεχνολογία Java. Η κάλυψη των νημάτων της είναι μοναδική και αρκετά χρήσιμη για να την κάνει μια ωραία προσθήκη σε μια βιβλιοθήκη. Χόλουμπ Επεξεργασία νημάτων Java περιέχει μερικές ωραίες τεχνικές για να αξιοποιήσετε στο έπακρο τον προγραμματισμό νήματος. Δεν είμαι σίγουρος αν είναι απαραίτητος πόρος. Υπολογιστική πλατφόρμα Java υψηλής απόδοσης φαίνεται κατάλληλο για όσους ενδιαφέρονται για τον παράλληλο κόσμο των υπολογιστών. Διαφορετικά, θα το άφηνα στο ράφι.

Ο John Zukowski είναι ανεξάρτητος σύμβουλος Java, συγγραφέας του Definitive Guide to Swing for Java 2, Second Edition from Apress, Mastering Java 2 from Sybex και Java AWT Reference από το O'Reilly, καθώς και του About's Focus on Java guide.
$config[zx-auto] not found$config[zx-overlay] not found