لقد بدأت مؤخرًا العمل على مجمع تبادل العملات المشفرة. في الأساس، أقوم بإرسال طلبات إلى مجموعة من البورصات المختلفة ومقارنة الأسعار. وهذا يجب أن يتم في أسرع وقت ممكن. في هذه التدوينة، سأعرض بعض التعديلات التي قمت بها من أجل تعزيز أدائي بشكل ملحوظ.
ومع ذلك، ضع في اعتبارك أنني لست خبيرًا (خاصة في لعبة go) وأنا فقط أشارك النتائج التي توصلت إليها من مشروعي الشخصي.
تأتي هذه التحسينات في ترتيب أكبر تحسين لوقت التشغيل.
في أي برنامج Go، تعد إجراءات goroutines ضرورية للسرعة. أكبر دفعة قمت بها كانت من خلال إرسال الطلبات بشكل متزامن. نظرًا لأنني بحاجة إلى إجراء ما يصل إلى 12 تبادلًا مختلفًا، فإن إرسال هذه الطلبات في نفس الوقت أدى إلى انخفاض وقت التشغيل من حوالي 24 ثانية إلى ~ 3 فقط.
Goroutines مذهلة وسهلة الاستخدام للغاية. يجب عليك تضمينها حيثما أمكن ذلك. ولكن كن حذرًا دائمًا من سباقات البيانات
لقد استبدلت encoding/json بـ github.com/json-iterator/go.jsoniter هي مكتبة معالجة JSON سريعة تعمل كبديل مباشر للمكتبة القياسية، لذلك لم أضطر إلى تغيير أي كود ، مجرد تبديل مكتبة.
النتائج المعيارية
لقياس تحسينات الأداء، قمت بإجراء بعض المعايير لمقارنة التشفير/json وjsoniter. وفيما يلي ملخص للنتائج:
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 ثانية في البداية إلى حوالي ثانيتين. تحسن قوي جدًا!
إذا كنت مهتمًا بالرمز الخاص بمقاييسي، فهو متاح هنا
إذا استمتعت بهذا المنشور وترغب في دعم عملي، يمكنك التبرع هنا.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3