2011-03-08 11 views
5

वास्तव में एक सैद्धांतिक सवाल वास्तव में।अपाचे पुनर्वित्त के तहत PHP है?

कहता है कि मेरी वेबसाइट में एक ऐसा फॉर्म शामिल है जो ई-मेल भेजने के लिए PHP मेल फ़ंक्शंस का उपयोग करता है। मेरे पास 500 उपयोगकर्ता एक ही समय में सबमिट करने पर क्लिक कर रहे हैं। 500 अलग-अलग सत्रों में 500 ई-मेल PHP से भेजे जाने हैं।

यह समवर्ती रूप से किया जाएगा? कितने धागे शामिल हैं? क्या प्रत्येक दूसरों को ब्लॉक करेगा और इसे एक-एक करके करेगा?

उत्तर

4

ऐसी दो चीजें हैं जिनके बारे में आपको सोचने की आवश्यकता है।

पहला यह है कि आपके वेब सर्वर को कैसे कॉन्फ़िगर किया गया है। यदि आप अपाचे का उपयोग कर रहे हैं, तो कुछ processing modules हैं जिन्हें से चुना जा सकता है। सबसे लोकप्रिय प्रसंस्करण मॉड्यूल prefork है, जिसमें एक एकल मूल प्रक्रिया और एकाधिक बाल प्रक्रियाएं होती हैं। प्रत्येक बच्चे एक समय में एक अनुरोध संभालता है। यह पूरी तरह से थ्रेडिंग से बचाता है, क्योंकि सभी अपाचे मॉड्यूल थ्रेड सुरक्षित नहीं हैं। आपको उत्पादन में कहीं भी कर्मचारी मॉड्यूल भी मिल सकता है। यह प्रति बच्चे कई अनुरोधों को पूरा करने के लिए फोर्किंग व्यवहार और थ्रेडिंग के संयोजन का उपयोग करता है। इसका उपयोग केवल तभी किया जा सकता है जब प्रत्येक एकल अपाचे मॉड्यूल और इसकी सभी निर्भरता थ्रेड सुरक्षित हैं।

दूसरी बात यह सोचने के लिए है कि PHP स्वयं ही है। जबकि कोर PHP भाषा और कुछ एक्सटेंशन थ्रेड सुरक्षित हैं, कई एक्सटेंशन थ्रेड सुरक्षित नहीं हैं। इस कारण से, जब आप अपाचे और mod_php का उपयोग कर रहे हैं, तो प्रीफ़ोर प्रोसेसिंग मॉड्यूल आपकी सबसे अच्छी पसंद है। (PHP में स्वयं धागे की कोई आंतरिक अवधारणा नहीं है।)

tl; dr: अपाचे + PHP = अपाचे बच्चे प्रति अनुरोध। आपके पास आमतौर पर केवल 20-30 अपाचे बच्चे होंगे, जिसका अर्थ है 20-30 संभावित समवर्ती अनुरोध। यह विन्यास पर निर्भर करता है।

1

लिनक्स-आधारित सर्वर ईमेल में स्थानीय sendmail कमांड का उपयोग करके भेजा जाता है। यह संदेश और रिटर्न स्वीकार करता है। शेष काम आपके एमटीए (असीमित रूप से) द्वारा किया जाता है जो दशकों के माध्यम से इस तरह की नौकरियों के लिए कठोर और अनुकूलित किया जाता है।

+0

बहुत धन्यवाद। तो शायद मेल एक अच्छा उदाहरण नहीं था। अन्य कार्रवाइयों के बारे में, कहें, अगर सबमिट डेटाबेस अनुरोध को ट्रिगर करता है, या स्थानीय सर्वर-साइड गणना जो 10 सेकंड लेती है। क्या एक्स एक्स वर्कर थ्रेड का उपयोग करके समवर्ती रूप से किया जाएगा? – JasonGenX

+0

अपाचे में अनुकरण करने वाली कई बाल प्रक्रियाएं होंगी। कॉफ़िगरेशन द्वारा परिभाषित इन प्रक्रियाओं की अधिकतम संख्या है। प्रत्येक बच्चे की प्रक्रिया अधिक धागे शुरू कर सकती है (यह आमतौर पर स्टार्टअप पर किया जाता है, और कोई थ्रेड रनटाइम नहीं बनाया जाता है)। - तो यह एक समस्या नहीं होनी चाहिए एक प्रक्रिया कुछ सेकंड के लिए रुकती है, लेकिन आपको इसकी कॉन्फ़िगरेशन करते समय इसके बारे में अवगत होना चाहिए। – vbence

+0

तो जब मैं थ्रेड-फ्री PHP कोड लिखता हूं, तो मैं मान सकता हूं कि अपाचे पर कॉन्फ़िगरेशन के अनुसार क्रियाएं एक साथ की जाएंगी? मैं "एकल उपयोगकर्ता" के साथ दिमाग में कोड? – JasonGenX

संबंधित मुद्दे