2017-01-13 4 views
5

fasthttp सर्वर नेट/http से 10 गुना तेज है।गोलांग पैकेज में, नेट/http से फास्टेट तेजी से क्यों है?

कार्यान्वयन (कोडिंग स्तर पर) के मामले में उन्हें यह तेज़ी से क्या बनाता है?
यह आने वाले अनुरोधों का प्रबंधन कैसे करता है जो दूसरे से अलग है?

+4

मुख्य कारण: fasthttp ** ** HTTP का पूर्ण कार्यान्वयन नहीं है। अधिकांश HTTP सामानों के लिए fasthttp पर्याप्त अच्छा हो सकता है, लेकिन सब कुछ के लिए नहीं। – Volker

+0

@ वोल्कर ... क्या आप बता सकते हैं कि fasthttp –

+1

में जो चीजें छोड़ी गई हैं, शुरुआत करने वालों के लिए, कोई http/2 समर्थन https://github.com/valyala/fasthttp/issues/144 – nishanths

उत्तर

9

लेख husobee से "http implementation fasthttp in golang" का उल्लेख है:

  1. कार्यकर्ता पूल मॉडल एक शून्य आवंटन मॉडल है, श्रमिकों के रूप में:

    खैर, यह कई कारणों से एक बेहतर कार्यान्वयन है पहले ही शुरू हो चुके हैं और सेवा के लिए तैयार हैं, जबकि stdlib कार्यान्वयन में go c.serve() को goroutine के लिए स्मृति आवंटित करना है।

  2. कार्यकर्ता पूल मॉडल को ट्यून करना आसान है, क्योंकि आप कार्य इकाइयों की संख्या के बफर आकार को बढ़ा सकते हैं/घटा सकते हैं, जिसे आप स्वीकार कर सकते हैं, आग बनाम और stdlib
  3. में मॉडल भूल जाएं वर्कर पूल मॉडल चैनल संचार के माध्यम से सर्वर से अधिक जुड़े होने की अनुमति देता है, अगर सर्वर को उदाहरण के लिए शट डाउन करने की आवश्यकता है, तो यह stdlib कार्यान्वयन
  4. की तुलना में श्रमिकों के साथ अधिक आसानी से संवाद करने में सक्षम होगा, हैंडलर फ़ंक्शन परिभाषा हस्ताक्षर बेहतर है, क्योंकि यह केवल एक संदर्भ में होता है जिसमें हैंडलर द्वारा अनुरोध किए गए अनुरोध और लेखक दोनों शामिल हैं। यह मानक पुस्तकालय से बेहतर है, जैसा कि आप stdlib से प्राप्त करते हैं, एक अनुरोध और प्रतिक्रिया लेखक है ... अनुरोध के भीतर संदर्भ शामिल करने के लिए go1.7 में काम लोगों को देने के लिए बहुत हैक है जो वे वास्तव में चाहते हैं (संदर्भ) किसी को तोड़ने के बिना।

कुल मिलाकर अनुरोध के लिए एक कार्यकर्ता पूल मॉडल के साथ एक सर्वर लिखना बेहतर है, क्योंकि अनुरोध के अनुसार "थ्रेड" प्रति अनुरोध करने के विपरीत, बॉक्स से बाहर निकलने का कोई तरीका नहीं है।

+1

@ अमित-वर्मा, फिर भी, कृपया ध्यान दें कि इस पैकेज के तेज़ कारणों में से एक यह है कि ["मानक इसके लेखक के रवैये के लिए हैं] [https://groups.google.com/d/msg/golang-nuts/OaQu4QezAr0/ AtrwY00LBgAJ)। इसलिए यदि मैं आप थे, तो मैं सुरक्षित पक्ष पर 'नेट/http' से शुरू करूंगा: सीएस/आईटी * में रहने वाले लोगों * में विलोपन को खत्म करने की प्राकृतिक प्रवृत्ति है, ठीक है, हम सभी को हमारे सिस्टम पसंद हैं "सबसे अच्छा"। दुर्भाग्यवश, वास्तविक दुनिया में * रखरखाव * अधिकांश समय कच्ची गति को तोड़ देता है। – kostix

+1

@ अमित-वर्मा, ठीक है, जब तक कि आप फेसबुक नहीं हैं और उदाहरण के लिए, यूएसएलएफ को पागलपन बनाए रखने के प्रयासों के साथ परियोजनाओं में शामिल होने की पेशकश कर सकते हैं जैसे PHP वास्तव में उनके वर्कलोड के लिए काम करना ;-) मेरा क्या मतलब है, 'नेट/http' युद्ध-परीक्षण और मानक अनुपालन करते हैं और इसके पीछे कोर गो टीम है। तो क्या आपको वास्तव में अपने प्रोजेक्ट * के लिए 'फास्टेटप' की कच्ची गति की आवश्यकता है? * क्या आपके पास बाधाएं हैं? क्या आपने इसे प्रोफाइल किया है और सामान्य अपराधियों से इंकार कर दिया है (जैसे अप्रभावी आवंटन/प्वाइंटर्स को पॉइंटर्स पॉइंटर्स आदि के बहुत सारे)? – kostix

+0

@AmitVerma, मेरी पिछली टिप्पणी के आखिरी बिट्स का उत्तर देने का ख्याल रखता है: «तो क्या आपको वास्तव में अपनी परियोजना के लिए फ़ैस्टेट की कच्ची गति की आवश्यकता है? क्या आपके पास बाधाएं हैं? क्या आपने इसे प्रोफाइल किया है और सामान्य अपराधियों से इंकार कर दिया है (जैसे अप्रभावी आवंटन/प्वाइंटर्स पॉइंटर्स पॉइंटर्स टू पॉइंटर्स इत्यादि)? »मेरा मतलब है, आप एक आम जाल में गिरने लगते हैं जो अधिकांश नौसिखिया प्रोग्रामर गिरते हैं।यह "मैं * जानता हूं * मेरा प्रोग्राम * धीमा होना चाहिए * यहां बिल्कुल" * मंत्र - बिना किसी प्रोफाइलिंग किए। यह सादा लंगड़ा है और आप किसी भी भुगतान उत्पादन कार्य करने से पहले इस आदत को बेहतर ढंग से मुक्त करेंगे। – kostix

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