मैंने हाल ही में एक क्रिप्टोकरेंसी एक्सचेंज एग्रीगेटर पर काम करना शुरू किया है। मूलतः मैं विभिन्न एक्सचेंजों को अनुरोध भेजता हूं और दरों की तुलना करता हूं। इसे यथासंभव शीघ्र बनाना होगा। इस पोस्ट में, मैं कुछ बदलाव दिखाऊंगा जो मैंने अपने प्रदर्शन को उल्लेखनीय रूप से बढ़ाने के लिए किए हैं।
हालांकि ध्यान रखें कि मैं कोई विशेषज्ञ नहीं हूं (विशेषकर गो में) और मैं सिर्फ अपने निजी प्रोजेक्ट से अपने निष्कर्ष साझा कर रहा हूं।
ये सुधार रनटाइम के सबसे बड़े सुधार के क्रम में आते हैं।
किसी भी गो प्रोग्राम में, गति के लिए गोरोइन आवश्यक हैं। मैंने सबसे बड़ा प्रोत्साहन समवर्ती अनुरोध भेजकर किया। चूँकि मुझे 12 अलग-अलग एक्सचेंजों को हिट करने की आवश्यकता है, इन अनुरोधों को एक ही समय में भेजने से मेरा रनटाइम लगभग 24 सेकंड से घटकर केवल ~3 रह गया।
गोरूटीन्स अद्भुत और उपयोग में बेहद आसान हैं। जहां भी संभव हो आपको उन्हें शामिल करना चाहिए। लेकिन डेटा रेस से हमेशा सावधान रहें
मैंने encoding/json को github.com/json-iterator/go.jsoniter से बदल दिया है, यह एक तेज़ JSON प्रोसेसिंग लाइब्रेरी है जो मानक लाइब्रेरी के लिए ड्रॉप-इन प्रतिस्थापन के रूप में काम करती है, इसलिए मुझे कोई कोड नहीं बदलना पड़ा , बस एक लाइब्रेरी स्विच।
बेंचमार्क परिणाम
प्रदर्शन सुधारों को मापने के लिए, मैंने एन्कोडिंग/जेसन और जेसोनिटर की तुलना करते हुए कुछ बेंचमार्क चलाए। यहां परिणामों का सारांश दिया गया है:
goos: linux goarch: amd64 pkg: apiSpeedImprove cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics BenchmarkEncodingJSON-12 140383 7381 ns/op BenchmarkJSONIter-12 974605 1217 ns/op PASS ok apiSpeedImprove 3.216s
तो, jsoniter मानक लाइब्रेरी से लगभग 6 गुना तेज़ है।
मैंने प्रत्येक अनुरोध के लिए नए HTTP हैंडलर बनाने के बजाय पुन: उपयोग करना शुरू कर दिया। एक बार हैंडलर स्थापित करके और उसका पुन: उपयोग करके, मैं प्रत्येक अनुरोध के लिए नए हैंडलर बनाने के ओवरहेड में कटौती करता हूं।
बेंचमार्क परिणाम
प्रत्येक अनुरोध के लिए नए हैंडलर बनाने की तुलना में पुन: उपयोग किए गए हैंडलर की तुलना करने वाले बेंचमार्क के परिणाम यहां दिए गए हैं:
goos: linux goarch: amd64 pkg: apiSpeedImprove/httpReuse cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics BenchmarkReusedHandler-12 2179 505189 ns/op BenchmarkNewHandlerPerRequest-12 2341 507525 ns/op PASS ok apiSpeedImprove/httpReuse 7.270s
प्रत्येक अनुरोध के लिए एक नया हैंडलर बनाने की तुलना में HTTP हैंडलर का पुन: उपयोग करने से प्रदर्शन में मामूली वृद्धि हुई।
इन बदलावों के साथ मैं सारी जानकारी इकट्ठा करने में लगने वाले समय को शुरू में 24 सेकंड से घटाकर लगभग 2 सेकंड करने में कामयाब रहा। काफ़ी ठोस सुधार!
यदि आप मेरे बेंचमार्क के कोड में रुचि रखते हैं, तो यह यहां उपलब्ध है
अगर आपको यह पोस्ट अच्छी लगी और आप मेरे काम का समर्थन करना चाहते हैं, तो आप यहां दान कर सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3