يقدّم هذا الكتاب حيلاً ونصائح واقتراحات عملية لتحسين أداء شيفرة Go. وتستند رؤاه إلى التطبيق الرسمي لمصرِّف Go ووقت تشغيله.
الحياة مليئة بالمقايضات، وكذلك عالم البرمجة. ففي البرمجة، نوازن باستمرار بين مقايضات تتعلق بقابلية قراءة الشيفرة وقابلية الصيانة وكفاءة التطوير والأداء، بل وداخل كل مجال من هذه المجالات أيضاً. فعلى سبيل المثال، غالباً ما ينطوي التحسين من أجل الأداء على مقايضات بين توفير الذاكرة وسرعة التنفيذ وتعقيد التطبيق.
في المشاريع الواقعية، لا تتطلب معظم أقسام الشيفرة أداءً أقصى. فإعطاء الأولوية لقابلية الصيانة وقابلية القراءة يتفوق عموماً على تقليص كل بايت أو كل ميكروثانية. يركّز هذا الكتاب على تحسين الأقسام الحرجة التي يهمّ فيها الأداء حقاً. واعلم أن بعض الاقتراحات قد تؤدي إلى شيفرة أكثر إسهاباً أو قد لا تُظهر مكاسب كبيرة إلا في سيناريوهات محددة.
تشمل محتويات هذا الكتاب ما يلي:
- كيفية استهلاك موارد CPU أقل.
- كيفية استهلاك ذاكرة أقل.
- كيفية إجراء تخصيصات ذاكرة أقل.
- كيفية التحكم في أماكن تخصيص الذاكرة.
- كيفية تقليل ضغط جمع النفايات.
لا يشرح هذا الكتاب كيفية استخدام أدوات تحليل الأداء مثل pprof، ولا يحاول التعمق في تفاصيل تطبيق المصرِّف ووقت التشغيل. كما لا يقدّم الكتاب كيفية استخدام التحسين الموجَّه بالتنميط (profile-guided optimization). ولا تستفيد أي من المحتويات المقدَّمة في هذا الكتاب من المؤشرات غير الآمنة (unsafe pointers) وcgo. كما لا يتناول الكتاب الخوارزميات. بعبارة أخرى، يحاول هذا الكتاب تقديم بعض اقتراحات التحسين بأسلوب واضح وسهل الفهم، لبرمجة Go العامة اليومية.
ما لم يُذكر خلاف ذلك، فإن أمثلة الشيفرة المقدَّمة في هذا الكتاب مُختبرة ومُشغَّلة على حاسوب محمول بإعداد البيئة التالي:
go version go1.24rc1 linux/amd64
goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
حُذفت بعض معلومات أزمنة القياس من نتائج القياس، للإبقاء على أسطر النتائج قصيرة.
يرجى ملاحظة ما يلي:
- بعض الاقتراحات المطروحة في هذا الكتاب تعمل على أي منصة ولأي طراز CPU، لكن بعضها الآخر قد يعمل فقط على منصات محددة وطرازات CPU محددة. لذا يرجى قياس أدائها في البيئات نفسها التي تعمل بها بيئات الإنتاج لديك قبل تبنّي أي منها.
- قد تتغير بعض تفاصيل تطبيق المصرِّف القياسي الرسمي ووقت التشغيل من إصدار إلى آخر، ما يعني أن بعض الاقتراحات المطروحة قد لا تعمل مع إصدارات سلسلة أدوات Go المستقبلية.
- سيُتاح الكتاب مفتوح المصدر في النهاية، فصلاً تلو الآخر.
عن المؤلف
Tapir هو مؤلف هذا الكتاب. وقد كتب أيضاً كتاب Go 101. وهو يخطط لكتابة بعض الكتب الأخرى من سلسلة Go 101. ترقّبوا ذلك.
كان Tapir يوماً (وربما سيعود مرة أخرى) مطوّر ألعاب مستقل. يمكنك العثور على ألعابه هنا: tapirgames.com.
عن GoTV
أثناء كتابة هذا الكتاب، استُخدمت الأداة GoTV لإدارة تنصيبات إصدارات متعددة من سلسلة أدوات Go وفحص فروق السلوك بين إصدارات سلسلة أدوات Go.
الملاحظات
نرحّب بتحسين هذا الكتاب عبر إرسال تصحيحات إلى قائمة قضايا Go 101 (https://github.com/go101/go101) لكل أنواع الأخطاء، مثل الأخطاء المطبعية والأخطاء النحوية وعدم دقة الصياغة والشروح الخاطئة وعيوب الوصف وأخطاء الشيفرة، وغيرها.
كما نرحّب بإرسال ملاحظاتك إلى حساب Go 101 على X: @zigo_101 (https://x.com/zigo_101).