'सर्वर' के तीन प्रकार होते हैं। वे सभी आम तौर पर आपके द्वारा दिखाए जाने वाले तरीके को लूप करते हैं, अंतर होता है जब सर्विस करने के लिए कुछ होता है।
एक फोर्किंग सेवा बस यही है। प्रत्येक अनुरोध के लिए, फोर्क() को एक नई बाल प्रक्रिया बनाने का आह्वान किया जाता है जो अनुरोध को संभालता है, फिर डिज़ाइन के आधार पर बाद के अनुरोधों को संभालने के लिए बाहर निकलता है (या जीवित रहता है)।
एक थ्रेडिंग सेवा एक फोर्किंग सेवा की तरह है, लेकिन एक पूरी नई प्रक्रिया के बजाय, अनुरोध करने के लिए एक नया धागा बनाया गया है। कांटे की तरह, कभी-कभी धागे बाद के अनुरोधों को संभालने के लिए आसपास रहते हैं। प्रदर्शन और पदचिह्न में अंतर बस धागे बनाम कांटे का अंतर है। स्मृति के उपयोग कि है नहीं एक ग्राहक सर्विसिंग (और बदलते होने का खतरा), इसके आमतौर पर बेहतर क्लोन नहीं करने के लिए पूरे पता स्थान पर निर्भर करता है। यहां एकमात्र जोड़ा जटिलता सिंक्रनाइज़ेशन है।
एक एकल प्रक्रिया (उर्फ एकल थ्रेड) सर्वर daemonize को केवल एक बार कांटा होगा। यह नए धागे नहीं उगाएगा, यह बाल प्रक्रियाओं को जन्म नहीं देगा। जब फ़ाइल डिस्क्रिप्टर डेटा प्राप्त करने के लिए तैयार होता है, या संसाधित होने के लिए उपलब्ध डेटा उपलब्ध होता है तो यह सॉकेट को मतदान() सॉकेट करना जारी रखेगा। प्रत्येक कनेक्शन के लिए डेटा अपनी संरचना में रखा जाता है, जिसे विभिन्न राज्यों द्वारा पहचाना जाता है (लेखन, एसीके की प्रतीक्षा, पढ़ना, बंद करना आदि)। यदि सही तरीके से किया जाता है, तो यह एक बेहद कुशल डिजाइन हो सकता है। काम करने की प्रतीक्षा करते समय कई बच्चे या धागे अवरुद्ध होने के बजाय, आपके पास एक ही प्रक्रिया और ईवेंट लूप सर्विसिंग अनुरोध हैं क्योंकि वे तैयार हैं।
ऐसे कई उदाहरण हैं जहां एकल थ्रेडेड सेवाएं एकाधिक धागे उत्पन्न करती हैं, हालांकि अतिरिक्त धागे आने वाले अनुरोधों की सेवा करने पर काम नहीं कर रहे हैं, एक उदाहरण (उदाहरण के लिए) एक थ्रेड में एक स्थानीय सॉकेट स्थापित कर सकता है जो व्यवस्थापक को स्थिति प्राप्त करने की अनुमति देता है सभी कनेक्शनों का।
गैर अवरुद्ध http सर्वर के लिए एक छोटी सी Googling कुछ रोचक हाथ वेब सर्वर कोड गोल्फ चुनौतियों के रूप में लिखा लुढ़का निकलेगा।
संक्षेप में, अंतर एक बार अंतहीन लूप दर्ज किया गया है कि क्या होता है, न सिर्फ अंतहीन लूप :)
स्रोत
2010-04-29 08:23:26
दूर नहीं वह सच fromt है ..लेकिन पढ़ना आम तौर पर सिस्टम को एक अवरुद्ध पढ़ा जाता है, जो केवल लौटने पर कुछ देता है। कोई डेटा प्राप्त नहीं हुआ == कोई निष्पादन नहीं। – eaanon01
@ eaanon01 - अगर (कमांड) मूल रूप से "डेटा प्राप्त होने पर" कहने का मेरा तरीका है। – Tony
.. क्यों टैग सी? –