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

ψήφοι
7

Ακόμα κι αν Python και Ruby έχουν ένα νήμα πυρήνα ανά θέμα διερμηνέα, έχουν μια παγκόσμια κλειδαριά διερμηνέα (GIL) που χρησιμοποιείται για την προστασία ενδεχομένως από κοινού δομές δεδομένων, έτσι ώστε αυτή αναστέλλει την εκτέλεση πολλαπλών επεξεργαστών. Ακόμα κι αν τα μέρη σε αυτές τις languajes που είναι γραμμένα σε C ή C ++ μπορεί να είναι ελεύθερη, με σπείρωμα, αυτό δεν είναι δυνατόν με καθαρή ερμηνεία κώδικα, εκτός αν χρησιμοποιήσετε πολλές διαδικασίες. Ποιος είναι ο καλύτερος τρόπος για να επιτευχθεί αυτό; Χρησιμοποιώντας FastCGI ; Η δημιουργία ενός συμπλέγματος ή ένα αγρόκτημα των virtualized servers; Χρησιμοποιώντας τα ισοδύναμά τους Java, JRuby και Jython;

Δημοσιεύθηκε 31/08/2008 στις 22:41
πηγή χρήστη
Σε άλλες γλώσσες...                            


5 απαντήσεις

ψήφοι
1

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

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

Απαντήθηκε 31/08/2008 στις 22:43
πηγή χρήστη

ψήφοι
4

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

Αν ένα αίτημα χρειάζεται τόσο πολύ τους πόρους, που θέλετε να χρησιμοποιήσετε πολλαπλούς πυρήνες ρίξτε μια ματιά στο pyprocessing . Αλλά δεν νομίζω ότι θα ήταν σοφό.

Απαντήθηκε 31/08/2008 στις 22:53
πηγή χρήστη

ψήφοι
4

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

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

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

Εάν εγκαταστήσετε mod_rails γνωστός και ως phusion επιβατών θα ξεκινήσει και να σταματήσει πολλαπλά αντίγραφα της διαδικασίας ράγες για σας, καθώς, έτσι θα καταλήξετε διάδοση του φορτίου σε πολλαπλές CPUs / πυρήνων με παρόμοιο τρόπο.

Απαντήθηκε 31/08/2008 στις 23:41
πηγή χρήστη

ψήφοι
1

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

Απαντήθηκε 10/10/2008 στις 08:18
πηγή χρήστη

ψήφοι
0

Για Python, η PyProcessing έργο σας επιτρέπει να προγραμματίσετε με διαδικασίες πολύ όπως και εσείς θα χρησιμοποιήσετε τα θέματα. Περιλαμβάνεται στην πρότυπη βιβλιοθήκη του πρόσφατα κυκλοφόρησε 2.6 έκδοση όπως multiprocessing. Η μονάδα διαθέτει πολλές δυνατότητες για τη δημιουργία και τον έλεγχο της πρόσβασης σε κοινές δομές δεδομένων (ουρές, σωλήνες, κλπ) και την υποστήριξη των κοινών ιδιωμάτων (π.χ. διευθυντές και πισίνες των εργαζομένων).

Απαντήθηκε 10/10/2008 στις 14:24
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more