
Με την άνοδο των επεξεργαστών πολλαπλών πυρήνων στην επιφάνεια εργασίας, multithreading ικανότητες θα γίνει ένα πολύτιμο περιουσιακό στοιχείο για τους προγραμματιστές. Μπορείτε να μου συστήσετε κάποιες καλές πηγές (βιβλία, tutorials, ιστοσελίδες, κλπ) για έναν προγραμματιστή που θέλει να μάθει για σπείρωμα προγραμματισμό;

 
Ποιες είναι μερικές καλές πόρους για την εκμάθηση σπείρωμα προγραμματισμού;
===========================================================================



Ρίξτε μια ματιά σε Herb Sutter του « [The Free Lunch τελείωσε](http://www.gotw.ca/publications/concurrency-ddj.htm) » και, στη συνέχεια, η σειρά των άρθρων για [την αποτελεσματική Παράλληλες λειτουργίες](http://herbsutter.wordpress.com/2008/07/31/effective-concurrency-the-many-faces-of-deadlock/) .

 

Έχω ειλικρινά ποτέ δεν διαβάζουν τον εαυτό μου, αλλά [Ταυτόχρονη Προγραμματισμός σε Java](http://rads.stackoverflow.com/amzn/click/0201310090) είναι ένα βιβλίο που έχω ακούσει συνιστάται από πολλούς ανθρώπους.

 

<http://www.cilk.com/multicore-e-book/>


Αυτό είναι ένα ωραίο γενική επισκόπηση της sitution, αν ψάχνετε για Tuorials και τα βιβλία θα μπορούσε να είναι καλύτερο να ορίσετε μια γλώσσα ως σημείο εκκίνησης ώστε να μπορείτε να βρωμίσει γύρω με κάποιο κωδικό.

 

Η γλώσσα προγραμματισμού Erlang παρέχει έναν εύκολο στη χρήση στυλ ταυτόχρονες προγραμματισμό. Δεν μπορείτε ποτέ να χρησιμοποιήσετε πραγματικά Erlang, αλλά οι έννοιες είναι μεταφερόμενο σε άλλες γλώσσες. Μπορεί να θέλετε να διαβάσετε το βιβλίο *προγραμματισμού Erlang: Λογισμικό για Ταυτόχρονη World* .


Οι φίλοι του λειτουργικού προγραμματισμού υποστηρίζουν ότι δεν υπάρχει καμία ανάγκη να μάθουν κάτι καινούργιο. Απλά χρησιμοποιήστε ένα καθαρό λειτουργικό γλώσσα, και ο compiler ή διερμηνέας θα παραλληλοποίηση αυτόματα τα πάντα. Έτσι, ίσως να θέλετε να μάθετε Haskell, OCaml, ή άλλη λειτουργική γλώσσα.

 

Joseph Albahari έγραψε μια καλή επισκόπηση των νημάτων σε C # εδώ:


<http://www.albahari.com/threading/>

 

Έχω διαβάσει (τις περισσότερες) [Java Παράλληλεσ στην πράξη](http://www.javaconcurrencyinpractice.com/) από τον Brian Goetz, το οποίο είναι πολύ καλό.


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


Αρχική σελίδα του συγγραφέα περιέχει μια [λίστα άρθρων](http://www.briangoetz.com/pubs.html) που έχει γράψει, μερικά από τα οποία περιλαμβάνουν κλωστή σχετικό υλικό. Ίσως ξεκινήσει εκεί και αν σας αρέσει το στυλ του, να αγοράσει το βιβλίο.

 

Για ένα μεγάλο οδηγό και σημείο αναφοράς για τον προγραμματισμό συγχρονισμός σε C # (ή .NET γενικά) θα ήθελα να συστήσει το MSDN [Τι κάθε Dev πρέπει να ξέρετε για Πολυνηματική Apps](http://msdn.microsoft.com/msdnmag/issues/05/08/Concurrency/default.aspx) άρθρο του Vance Morrison στο MSDN. Περιέχει πολλές πληροφορίες βέλτιστων πρακτικών και προειδοποιήσεις σχετικά με πολυνηματική ανάπτυξη

 

Δεν ξέρω τι ακριβώς ψάχνετε, αλλά αν κάνετε ανάπτυξης WindowsForms το ακόλουθο post στο blog αξίζει κάθε ανάγνωση λεπτό:
 [WinForms UI Θέμα Ενεργοποιεί: Μια εμπεριστατωμένη επισκόπηση της Invoke / BeginInvoke / InvokeRequred](http://weblogs.asp.net/justin_rogers/articles/126345.aspx)

 

Νομίζω ότι Boost.Threads είναι μια μεγάλη βιβλιοθήκη C ++ συγχρονισμός για να μάθουν, ειδικά αν απλά θέλετε να ξεκινήσετε το γράψιμο multi-threaded εφαρμογές. Ο κώδικας είναι πολύ συνοπτική και εύκολα κατανοητή, καθώς και πρότυπο της επόμενης C ++ πιθανότατα θα περιλαμβάνουν βιβλιοθήκη σπείρωμα με βάση Boost.Threads (tutorial: <http://www.ddj.com/cpp/184401518> )

 

Αν θέλετε να πρέπει να πάει σε κάνει μια πολύ παράλληλη έκδοση του μια απλή εργασία, ή να δείτε πραγματικές λύσεις, θα μπορούσατε να κάνετε χειρότερα από ό, τι δούμε την [εύρεση ευρύ](http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder) έργο. Βασικά είναι για το πώς να το κάνουμε παράλληλα regex αντιστοίχιση των αρχείων καταγραφής αποτελεσματικά, αλλά προσπαθεί να προσθέσετε λίγο κώδικα δυνατόν. 


Οι συμμετέχοντες κατέθεσαν τις λύσεις σε πολλές διαφορετικές γλώσσες και τα [αποτελέσματα των αποδόσεων](http://www.tbray.org/ongoing/When/200x/2007/10/30/WF-Results) είναι αποσπασμένοι. Το πρωτότυπο έργο έχει πλέον ολοκληρωθεί και τώρα υπάρχει [μεγάλη finder 2](http://www.tbray.org/ongoing/When/200x/2008/05/01/Wide-Finder-2) ανάληψη των εργασιών σχετικά με.


[CodingHorror](http://www.codinghorror.com/) έχει μια καλή [εισαγωγή στο ευρύ σκόπευτρο](http://www.codinghorror.com/blog/archives/001131.html) .

 

<http://www.yoda.arachsys.com/csharp/threads/>

 

Για μια πλούσια, λεπτομερή επεξεργασία του θέματος, με μια καλή ισορροπία μεταξύ της επιστήμης και της πρακτικής του υπολογιστή, σας συνιστώ [Η τέχνη της πολλαπλούς προγραμματισμού](http://rads.stackoverflow.com/amzn/click/0123705916) . Πολλά παραδείγματα είναι στην αντικειμενοστραφή κώδικα, δηλαδή Java, με άλλες γλώσσες διάσπαρτα σε όλη. Εξαρτάται μόνο από το θέμα που καλύπτεται. Αυτό που πραγματικά αγαπούν για αυτό το βιβλίο είναι ότι ασχολείται με τον τρόπο κοινής αλγόριθμοι πρέπει να υλοποιηθούν σε μια ταυτόχρονη σχεδίαση. Φυσικά, υπάρχει τόσο πολύ περισσότερο!


Για γενικές έννοιες και θεραπεία των pthreads, μου αρέσει πολύ [Προγραμματισμός με το POSIX Threads](http://rads.stackoverflow.com/amzn/click/0201633922) . Όντας τη βιβλιοθήκη και το API που είναι, είναι σε C.


Για Windows και C # προγραμματιστές, ελέγξτε έξω [το blog του Joe της Duffy](http://www.bluebytesoftware.com/blog/) . Joe λειτουργεί σε παράλληλες βιβλιοθήκες, υποδομές και μοντέλα προγραμματισμού στο τμήμα προγραμματιστών της Microsoft. Έχει ένα βιβλίο που έρχονται Νοέμβρη 2008 με τίτλο [Ταυτόχρονη Προγραμματισμός σε Windows](http://www.bluebytesoftware.com/books/winconc/winconc_book_resources.html) ( [Amazon link](http://rads.stackoverflow.com/amzn/click/032143482X) ).


Επίσης, μην χάσετε το blog του Godfather του: Herb Sutter του [Mill Sutter του](http://herbsutter.wordpress.com/) . Έχει συνδέσεις με όλα τα άρθρα του στην Εφημερίδα Δρ Dobb και περισσότερο. Κάντε κλικ στην επιλογή του [κατηγορία Παράλληλες λειτουργίες](http://herbsutter.wordpress.com/category/concurrency/) .

 

Έχω διατηρήσει μια linkblog για τα άρθρα συναγωνισμού, blogs, και τα έργα στο:


<http://concurrency.tumblr.com>


Συνήθως δημοσιεύσετε ένα σύνδεσμο ή δύο ημερησίως σε μια ποικιλία θεμάτων (κλωστές, ηθοποιοί, κλείδωμα, παράλληλου προγραμματισμού) σε μια ποικιλία από περιβάλλοντα (Erlang, Java, Scala, ΝΕΤ, C ++, Ruby, Python, κλπ). 

 

ιστοσελίδες των κατασκευαστών CPU έχει κάποιο ενδιαφέρον περιεχόμενο:


<http://developer.amd.com/documentation/articles/Pages/default.aspx#parallel>


<http://software.intel.com/en-us/multi-core>


Επίσης ανοικτού κώδικα σπείρωμα βιβλιοθήκη της Intel έχει κάποια καλά στοιχεία:


<http://www.threadingbuildingblocks.org/>

 

Είναι Δελφών συγκεκριμένο, αλλά κανένας λόγος για τον οποίο η έννοια αυτή δεν θα ισχύει για οποιαδήποτε άλλη γλώσσα!


[Πολλαπλών Threading Tutorial](http://www.eonclash.com/Tutorials/Multithreading/MartinHarvey1.1/ToC.html)

 

Γράφω για multithreading και συγχρονισμός σε C ++ στο [blog μου](http://www.justsoftwaresolutions.co.uk/blog/) . Είμαι, επίσης, γράφει ένα βιβλίο για συναγωνισμό σε C ++: [C ++ Παράλληλεσ σε δράση](http://www.manning.com/williams/) .

 

Εάν εργάζεστε με C #, το βιβλίο "C # 2008 και 2005 με σπείρωμα προγραμματισμού", από τον Gaston Γ Hillar - Packt Εκδόσεις - [http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and- 2005-threaded-προγραμματισμού / βιβλίο](http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and-2005-threaded-programming/book) , θα σας βοηθήσει. Συνιστάται ανεπιφύλακτα για C # προγραμματιστές, επειδή μπορείτε να κατεβάσετε τον κώδικα με αστεία παραδείγματα που εκμεταλλεύονται τον υπολογιστή πολλαπλών πυρήνων σας. Το βιβλίο είναι ένα πολύ καλό οδηγό με πολλά κώδικα στην πράξη. Λέει ιστορίες ενώ εξηγεί τις πιο δύσκολες έννοιες.

 