भले ही Python और Ruby में एक कर्नेल थ्रेड प्रति दुभाषिया धागा है, उनके पास एक वैश्विक दुभाषिया लॉक (जीआईएल) है जिसका उपयोग संभावित रूप से साझा डेटा संरचनाओं की सुरक्षा के लिए किया जाता है, इसलिए यह बहु-प्रोसेसर निष्पादन को रोकता है। हालांकि सी या सी ++ में लिखे गए उन languajes में भाग मुक्त थ्रेडेड हो सकते हैं, यह शुद्ध व्याख्या कोड के साथ संभव नहीं है जब तक आप एकाधिक प्रक्रियाओं का उपयोग नहीं करते हैं। इसे प्राप्त करने का सबसे अच्छा तरीका क्या है? Using FastCGI? वर्चुअलाइज्ड सर्वरों का cluster or a farm बनाना? अपने जावा समकक्ष, जेआरबी और ज्योथन का उपयोग करना?रुबी या पायथन वेब साइट्स को एकाधिक कोर का उपयोग करने के लिए कैसे करें?
उत्तर
एक इंटरफ़ेस का उपयोग करें जो प्रत्येक प्रतिक्रिया को एक अलग दुभाषिया में चलाता है, जैसे mod_wsgi
पायथन के लिए। यह जीआईएल का सामना किए बिना बहु थ्रेडिंग का उपयोग करने देता है।
संपादित करें: जाहिर है, mod_wsgi
प्रति प्रक्रिया एकाधिक दुभाषियों का समर्थन नहीं करता है क्योंकि बेवकूफ यह पता नहीं लगा सकते कि एक्सटेंशन मॉड्यूल को सही तरीके से कैसे कार्यान्वित किया जाए। यह अभी भी फास्टसीजीआई-शैली की अलग प्रक्रियाओं में चल रहे अनुरोधों का समर्थन करता है, हालांकि, यह स्पष्ट रूप से वर्तमान स्वीकार्य समाधान है।
मुझे पूरी तरह से यकीन नहीं है कि आप कौन सी समस्या को हल करना चाहते हैं, लेकिन यदि आप अपने पाइथन/डीजेंगो एप्लिकेशन को apache prefork एमपीएम के माध्यम से mod_python apache का उपयोग करके तैनात करते हैं तो विभिन्न अनुरोधों को संभालने के लिए कई कार्यकर्ता प्रक्रियाएं शुरू हो जाएंगी।
यदि किसी अनुरोध को इतने सारे संसाधनों की आवश्यकता है, तो आप एकाधिक कोर का उपयोग करना चाहते हैं pyprocessing पर एक नज़र डालें। लेकिन मुझे नहीं लगता कि यह बुद्धिमान होगा।
रेल के साथ ऐसा करने का 'मानक' तरीका है मोन्गल उदाहरणों (यानी: रेल अनुप्रयोगों की 4 प्रतियां) का "पैक" चलाने के लिए और उसके बाद अपाचे या nginx या सॉफ्टवेयर के कुछ अन्य टुकड़े का उपयोग करने के लिए उनमें से और एक लोड बैलेंसर के रूप में कार्य करते हैं।
शायद यह है कि यह अन्य रूबी ढांचे जैसे मेरब आदि के साथ कैसे किया जाता है, लेकिन मैंने व्यक्तिगत रूप से उन लोगों का उपयोग नहीं किया है।
ओएस प्रत्येक एमओएनआरएल को अपने स्वयं के सीपीयू पर चलाने का ख्याल रखेगा।
यदि आप mod_rails aka phusion passenger इंस्टॉल करते हैं तो यह आपके लिए रेल प्रक्रिया की कई प्रतियां भी शुरू और बंद कर देगा, इसलिए यह लोड को कई CPUs/कोरों में समान रूप से फैलाने को समाप्त कर देगा।
पायथन और रूबी में कई कोर का उपयोग करना संभव है, नई (हेवीवेट) प्रक्रियाओं को विकसित करना है। जावा समकक्ष जावा प्लेटफार्म की संभावनाओं का उत्तराधिकारी है। आप जावा थ्रेड का उपयोग कर सकते हैं। उदाहरण के लिए यह एक कारण है कि कभी-कभी (अक्सर) जावा एप्लिकेशन सर्वर जैसे ग्लासफ़िश रेल अनुप्रयोगों पर रूबी के लिए उपयोग किया जाता है।
पायथन के लिए, PyProcessing प्रोजेक्ट आपको प्रक्रियाओं के साथ प्रोग्राम करने की अनुमति देता है जैसे आप धागे का उपयोग करेंगे। इसे हाल ही में जारी किए गए 2.6 संस्करण की मानक लाइब्रेरी में multiprocessing
के रूप में शामिल किया गया है। मॉड्यूल में साझा डेटा संरचनाओं (कतार, पाइप इत्यादि) तक पहुंच स्थापित करने और नियंत्रित करने के लिए कई सुविधाएं हैं और सामान्य मुहावरे (यानी प्रबंधकों और कार्यकर्ता पूल) के लिए समर्थन।
नई प्रक्रियाओं को बढ़ाने की कोई आवश्यकता नहीं है, बस अनुरोधों के बीच उनका पुनः उपयोग करें। –
हां, निश्चित रूप से आप एक से अधिक अनुरोधों के लिए एक प्रक्रिया का पुन: उपयोग कर सकते हैं क्योंकि आप थ्रेडपूल का उपयोग प्रति अनुरोध के थ्रेड को रोकने से बचने के लिए कर सकते हैं। मेरा मतलब यह है कि आपको प्रति कोर की अपनी प्रक्रिया को विकसित करना होगा जिसका उपयोग किया जाना चाहिए। – dmeister