मेरे सर्वर में एक बड़ी फ़ाइल है। मुझे लगता है कि मल्टी थ्रेड डाउनलोड को 20Mbs मिल सकते हैं, लेकिन सिंगल थ्रेड को 10Mbps मिल सकता है, क्या कोई इसे समझा सकता है?
मेरे सर्वर में एक बड़ी फ़ाइल है। मुझे लगता है कि मल्टी थ्रेड डाउनलोड को 20Mbs मिल सकते हैं, लेकिन सिंगल थ्रेड को 10Mbps मिल सकता है, क्या कोई इसे समझा सकता है?
जवाबों:
आमतौर पर इसका कारण यह है कि आपके और अन्य सर्वर के बीच कहीं एक फ़ायरवॉल है जो प्रत्येक HTTP स्ट्रीम को 10Mbps तक सीमित करता है। जब आप मल्टी-थ्रेड का उपयोग करते हैं, तो आपको 2x 10Mb (प्रत्येक थ्रेड के लिए एक) मिलता है।
यह आपके और सर्वर और पैकेट आकार / tcpip विंडो आकार के बीच आपके पिंग के कारण होता है जिसका उपयोग आपके डाउनलोडिंग सॉफ्टवेयर द्वारा किया जाता है।
मूल रूप से, यदि आपके पास सर्वर पर 100ms पिंग है, और 100kb के पैकेट का अनुरोध करते हैं, तो आप 1 कनेक्शन का उपयोग करके केवल 10 पैकेट प्रति सेकंड प्राप्त कर सकते हैं, भले ही आपकी इंटरनेट की गति अनंत हो।
जब आप "पाइप को पूर्ण रखते हैं" तो टीसीपी सबसे अच्छा काम करता है - जब भेजने वाला ऐप बफ़र्स को तेज़ी से भेजता रहता है तो भेजने वाले को टीसीपी स्टैक लगातार डेटा के साथ दिया जाता है ताकि यह नेटवर्क पर हमेशा "फ्लाइट में डेटा" रख सके, और जब रिसीवर एप्लिकेशन काफी तेजी से रिसीवर टीसीपी स्टैक से पढ़ता रहता है कि रिसीवर टीसीपी विंडो कभी भी भरता नहीं है (फिर, इसलिए टीसीपी स्टैक हमेशा नेटवर्क पर "फ्लाइट में डेटा" रख सकता है)।
मैं एक खराब लिखित एकल-थ्रेडेड प्रेषक ऐप की कल्पना कर सकता हूं जो एक बफर को टीसीपी स्टैक से गुजरता है, यह सुनने के लिए इंतजार करता है कि यह पूरी तरह से एकेड है, और फिर एक और बफर पास करता है। इसका मतलब है कि नेटवर्क पर एक बार पहले बफर का अंत "फ्लाइट" में होता है, भेजने के लिए टीसीपी स्टैक को डेटा के लिए भूखा रखा जाता है, जिसका अर्थ है कि पाइप नालियों में बदल जाता है और जब तक एक वापस नहीं आता है और ऐप नहीं भेजता है यह एक नया बफर गुजरता है।
मैं एक खराब लिखित सिंगल-थ्रेडेड रिसीवर एप्लिकेशन की भी कल्पना कर सकता हूं जो प्राप्त टीसीपी स्टैक से तेजी से नहीं पढ़ता है और इस तरह टीसीपी स्टैक के बफ़र्स को भर देता है, जिसका मतलब है कि टीसीपी विंडो भर जाती है, जो टीसीपी स्टैक को भेजने का कारण बनता है। जब तक खिड़की खुल न जाए, तब तक भेजना बंद करें। रिसीवर की टीसीपी विंडो का आकार बढ़ाने से थोड़ी मदद मिल सकती है, लेकिन इस अंत में असली समाधान डेटा को तेजी से पढ़ना है।
ठीक है, यह शायद इसलिए है क्योंकि आप केवल एक कनेक्शन पर इतना डेटा स्थानांतरित कर सकते हैं। हालाँकि एक बहु-थ्रेडेड प्रोग्राम में आपके पास एक ही समय में डेटा प्राप्त करने वाले दो कनेक्शन हो सकते हैं और आपके द्वारा प्राप्त की जाने वाली जानकारी को दोगुना कर सकते हैं। उदाहरण के लिए सर्वर की गति से आप इसे डाउनलोड कर रहे हैं, इसके लिए कुछ सीमाएँ हैं ... दो बंदों ने जो भी मल्टी-थ्रेडेड डाउनलोडर लिखा है, उन्हें लिखना आसान नहीं है।