मैंने आईओ :: सॉकेट :: आईएनईटी का उपयोग कर पर्ल के साथ क्लाइंट-सर्वर प्रोग्राम बनाया है। मैं सीजीआई आधारित साइट के माध्यम से सर्वर का उपयोग करता हूं। मेरा सर्वर प्रोग्राम डेमॉन के रूप में चलाएगा और एकाधिक एक साथ कनेक्शन स्वीकार करेगा। मेरी सर्वर प्रक्रिया लगभग 100 एमबी मेमोरी स्पेस (9 बड़े सरणी, कई सरणी ...) का उपभोग करती है। मैं चाहता हूं कि इन हैंश को स्मृति में रहें और उन्हें साझा करें ताकि मुझे उन्हें हर कनेक्शन के लिए बनाना न पड़े। हैश निर्माण में 10-15 सेकंड लगते हैं।बड़े मेमोरी उपयोग के साथ पर्ल डिमन के भीतर मैं एकाधिक सॉकेट कैसे संभाल सकता हूं?
जब भी सॉकेट के माध्यम से कोई नया कनेक्शन स्वीकार किया जाता है, तो मैंने प्राप्त प्रत्येक कनेक्शन के लिए प्रसंस्करण की देखभाल करने के लिए एक नई प्रक्रिया को फोर्क किया। चूंकि माता-पिता की प्रक्रिया बहुत बड़ी है, हर बार जब मैं कांटा, प्रोसेसर एक नए बच्चे को स्मृति आवंटित करने की कोशिश करता है, लेकिन सीमित स्मृति के कारण, एक नए बच्चे को जन्म देने में बड़ा समय लगता है, जिससे प्रतिक्रिया समय बढ़ जाता है। कई बार यह एक कनेक्शन के लिए भी लटकता है।
अभिभावक प्रक्रिया 9 बड़े हैंश बनाता है। प्रत्येक बच्चे के लिए, मुझे केवल एकमात्र हैश को रीड-ओनली मोड में संदर्भित करने की आवश्यकता है। मैं बच्चे के माध्यम से हैश अपडेट नहीं करूंगा। मैं कॉपी-ऑन-राइट जैसे कुछ का उपयोग करना चाहता हूं, जिसके द्वारा मैं पूरे 100 एमबी या पूरे बच्चे के साथ माता-पिता द्वारा बनाए गए पूरे वैश्विक चर साझा कर सकता हूं? या थ्रेड जैसे किसी भी अन्य तंत्र। मुझे उम्मीद है कि सर्वर प्रति सेकेंड न्यूनतम 100 अनुरोध प्राप्त करेगा और यह उन सभी को समानांतर में संसाधित करने में सक्षम होना चाहिए। औसतन, एक बच्चा 2 सेकंड में बाहर निकल जाएगा।
मैं केवल 1 जीबी रैम के साथ विंडोज एक्सपी पर सिग्विन का उपयोग कर रहा हूं। मुझे इस मुद्दे को दूर करने का कोई रास्ता नहीं मिल रहा है। क्या आप कुछ सुझाव दे सकते हैं? मैं चर को कैसे साझा कर सकता हूं और प्रति सेकंड 100 बाल प्रक्रियाएं भी बना सकता हूं और उन्हें प्रबंधित कर सकता हूं और उन्हें सिंक्रनाइज़ कर सकता हूं,
धन्यवाद।
क्या पर्ल के फोर्क का नकली विंडोज संस्करण एक ही प्रक्रिया में एक थ्रेड नहीं है? यह मुझे हाल ही में थोड़ा सा है और यही मुझे पढ़ना याद है। –
हां, वे दोनों Win32 थ्रेड के रूप में लागू किए गए हैं, लेकिन एक नकली प्रक्रिया को एक पर्ल परिप्रेक्ष्य से एक ithread के रूप में लागू नहीं किया जाता है। –