
Ακόμα κι αν [Python](http://twistedmatrix.com/pipermail/twisted-python/2004-May/007896.html) και [Ruby](http://www.reddit.com/comments/6wmum/thread_safe_ruby_on_rails_in_22_release/) έχουν ένα νήμα πυρήνα ανά θέμα διερμηνέα, έχουν μια παγκόσμια κλειδαριά διερμηνέα (GIL) που χρησιμοποιείται για την προστασία ενδεχομένως από κοινού δομές δεδομένων, έτσι ώστε αυτή αναστέλλει την εκτέλεση πολλαπλών επεξεργαστών. Ακόμα κι αν τα μέρη σε αυτές τις languajes που είναι γραμμένα σε C ή C ++ μπορεί να είναι ελεύθερη, με σπείρωμα, αυτό δεν είναι δυνατόν με καθαρή ερμηνεία κώδικα, εκτός αν χρησιμοποιήσετε πολλές διαδικασίες. Ποιος είναι ο καλύτερος τρόπος για να επιτευχθεί αυτό; [Χρησιμοποιώντας FastCGI](http://blogs.codehaus.org/people/tirsen/archives/001041_ruby_on_rails_and_fastcgi_scaling_using_processes_instead_of_threads.html) ; Η δημιουργία ενός [συμπλέγματος ή ένα αγρόκτημα](http://blog.innerewut.de/files/images/stage_2.png) των virtualized servers; Χρησιμοποιώντας τα ισοδύναμά τους Java, JRuby και Jython;

 
Πώς να κάνει Ruby ή Python ιστοσελίδες να χρησιμοποιούν πολλαπλούς πυρήνες;
===========================================================================



Χρησιμοποιήστε μια διεπαφή που τρέχει κάθε απόκριση σε ένα ξεχωριστό διερμηνέα, όπως `mod_wsgi`για Python. Αυτό σας δίνει τη δυνατότητα multi-threading να χρησιμοποιηθεί χωρίς να αντιμετωπίζουν τη GIL.


EDIT: Προφανώς, `mod_wsgi`υποστηρίζει πλέον πολλαπλά διερμηνείς ανά διαδικασία, επειδή ηλίθιοι δεν μπορούσα να καταλάβω πώς να εφαρμόσουν σωστά μονάδες επέκτασης. Εξακολουθεί να στηρίζει τη λειτουργία των αιτήσεων σε ξεχωριστές διαδικασίες FastCGI στιλ, όμως, γι 'αυτό είναι προφανώς η τρέχουσα αποδεκτή λύση.

 

Δεν είμαι απόλυτα σίγουρος ποια πρόβλημα που θέλετε, ώστε να λύσει, αλλά αν αναπτύξετε την εφαρμογή python / Django σας μέσω apache prefork MPM με τη χρήση mod\_python apache θα αρχίσουν διάφορες διαδικασίες εργαζόμενος για το χειρισμό διαφόρων αιτημάτων.


Αν ένα αίτημα χρειάζεται τόσο πολύ τους πόρους, που θέλετε να χρησιμοποιήσετε πολλαπλούς πυρήνες ρίξτε μια ματιά στο [pyprocessing](http://pyprocessing.berlios.de/) . Αλλά δεν νομίζω ότι θα ήταν σοφό.

 

Το «πρότυπο» τρόπος για να γίνει αυτό με ράγες είναι να τρέξει ένα «πακέτο» των περιπτώσεων Mongrel (δηλαδή: 4 αντίγραφα της αίτησης ράγες) και στη συνέχεια χρησιμοποιήστε apache ή nginx ή κάποιο άλλο κομμάτι του λογισμικού για να καθίσει μπροστά τους και να ενεργούν ως εξισορρόπησης φορτίου. 


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


Το λειτουργικό σύστημα θα φροντίσει για την εκτέλεση κάθε μιγάς με το δικό του επεξεργαστή.


Εάν εγκαταστήσετε [mod\_rails γνωστός και ως phusion επιβατών](http://www.modrails.com/) θα ξεκινήσει και να σταματήσει πολλαπλά αντίγραφα της διαδικασίας ράγες για σας, καθώς, έτσι θα καταλήξετε διάδοση του φορτίου σε πολλαπλές CPUs / πυρήνων με παρόμοιο τρόπο.

 

Στην Python και Ruby είναι δυνατόν μόνο να χρησιμοποιούν πολλαπλούς πυρήνες, είναι να αναπαράγονται νέες διαδικασίες (βαρέων βαρών). Οι ομολόγους Java κληρονομούν τις δυνατότητες της πλατφόρμας Java. Θα μπορούσε να σημαίνει τη χρήση Java θέματα. Αυτό είναι για παράδειγμα ένα λόγο για τον οποίο μερικές φορές (συχνά) διακομιστή Java Application όπως Glassfish χρησιμοποιούνται για Ruby on Rails εφαρμογές.

 

Για Python, η [PyProcessing](http://pyprocessing.berlios.de/) έργο σας επιτρέπει να προγραμματίσετε με διαδικασίες πολύ όπως και εσείς θα χρησιμοποιήσετε τα θέματα. Περιλαμβάνεται στην πρότυπη βιβλιοθήκη του πρόσφατα κυκλοφόρησε 2.6 έκδοση όπως [`multiprocessing`](http://docs.python.org/library/multiprocessing.html). Η μονάδα διαθέτει πολλές δυνατότητες για τη δημιουργία και τον έλεγχο της πρόσβασης σε κοινές δομές δεδομένων (ουρές, σωλήνες, κλπ) και την υποστήριξη των κοινών ιδιωμάτων (π.χ. διευθυντές και πισίνες των εργαζομένων).

 