मैंने रूबी और रेल के विभिन्न संस्करणों में थ्रेड सुरक्षा और प्रदर्शन के बारे में वेब के चारों ओर बहुत सारी सामग्री पढ़ी है और मुझे लगता है कि मैं इस बिंदु पर उन चीजों को काफी अच्छी तरह समझता हूं।थ्रेडसेफ एसिंक्रोनस रेल ऐप को कैसे तैनात करें?
चर्चाओं से अजीब रूप से गायब होने की प्रतीत होती है कि वास्तव में एक एसिंक्रोनस रेल ऐप को कैसे तैनात करना है। जब धागे और किसी ऐप में समक्रमिकता बारे में बात कर, दो चीजें लोगों को अनुकूलित करना चाहते हैं:
- न्यूनतम RAM उपयोग
- नया अनुरोध का उत्तर देने के लिए सक्षम होने के साथ सभी सीपीयू कोर का उपयोग करते हुए पिछले अनुरोध आईओ पर इंतजार कर रहे हैं
प्वाइंट 1 वह जगह है जहां लोग जेआरबी के बारे में उत्साहित होते हैं।
TheController < ActionController::Base
def fast
render :text => "hello"
end
def slow
render :text => User.count.to_s
end
end
fast
कोई आईओ है और सैकड़ों या अनुरोध प्रति सेकंड के हजारों सेवा कर सकते हैं, और slow
: इस सवाल के लिए मैं केवल बिंदु अनुकूलन करने के लिए 2.
इस मेरे एप्लिकेशन में केवल नियंत्रक है कहो कोशिश कर रहा हूँ नेटवर्क पर एक अनुरोध भेजना है, काम करने की प्रतीक्षा करें, फिर नेटवर्क पर जवाब प्राप्त करें, और इसलिए fast
से बहुत धीमी है।
तो एक आदर्श परिनियोजन सैकड़ों अनुरोधों को fast
को पूरा करने की अनुमति देगा जबकि slow
पर अनुरोध IO पर प्रतीक्षा कर रहा है।
वेब के आसपास की चर्चाओं से क्या गुम हो रहा है यह है कि इस समेकन को सक्षम करने के लिए ढेर की कौन सी परत जिम्मेदार है। पतली में --threaded
ध्वज है, जो "थ्रेड [प्रयोगात्मक] में रैक एप्लिकेशन को कॉल करेगा" - क्या यह प्रत्येक आने वाले अनुरोध के लिए एक नया धागा शुरू करता है? थ्रेड में रैक ऐप उदाहरणों को स्पूल करें जो आने वाले अनुरोधों के लिए बने रहें और प्रतीक्षा करें?
क्या पतला एकमात्र तरीका है या अन्य लोग हैं? क्या रूबी रनटाइम प्वाइंट 2 को अनुकूलित करने के लिए मायने रखता है?
मुझे संदेह होगा कि आपके रूबी संस्करण के बिंदु 2 के संबंध में बहुत कुछ कहना होगा। यह सर्वर के समवर्ती कार्यान्वयन पर निर्भर करेगा और कैसे रेल स्वयं को एक साथ रखा जाएगा। – providence