
مراجعة كتاب: هل البرمجة المتوازية صعبة، وإن كانت كذلك فما العمل
نشر أندرو هيلوير مراجعة مفصّلة لكتاب بول إي. ماكيني المجاني عن البرمجة المتوازية: ما نجح، وما لم ينجح، وأين يبقى النص مرتبطًا بنواة لينكس.
نشر أندرو هيلوير مراجعة مفصّلة للكتاب الدراسي المجاني على الإنترنت «Is Parallel Programming Hard, And, If So, What Can You Do About It?» لمؤلفه بول إي. ماكيني، مؤلف آلية المزامنة RCU في نواة لينكس. قرأ هيلوير معظم الكتاب خلال عطلة عائلية، ويشرح ما نجح وما لم ينجح وأين يبقى النص داخل سياق نواة لينكس.
من الأنظمة الموزعة إلى الشيفرة بلا أقفال
بعد عقد من العمل مع TLA⁺ والأنظمة الموزعة، وصل هيلوير إلى الكتاب بعد مؤتمر Software Should Work عام 2026 في كولومبيا بولاية ميزوري. هناك أظهرت محادثته مع فيليب بيزلو حول صعوبة كتابة جامع نفايات متوازٍ بلا أقفال كم كان يعرف القليل عن التوازي. وأشار بيزلو أيضًا إلى أن TLA⁺ ليست ملائمة للاستدلال على الأحداث التي تقع حرفيًا في الوقت نفسه، وشدد على مفهوم الاتساق الخطي (linearizability). كان هيلوير يريد كتابًا عن البرمجة بلا أقفال لا عن أقفال mutex أو تمرير الرسائل.
ذاكرات المعالج وحيل المُصرِّف والعدّادات
يشرح الفصل الثالث «Hardware and its Habits» ما يجعل معالجات اليوم سريعة وما يجعلها بطيئة، ومن ذلك حالة نواة تكتب إلى عنوان غير موجود في ذاكرتها الوسيطة. لا يُذكر بروتوكول التماسك MESI إلا في الملحق، لكن معرفته توضح بقية الكتاب: نوى x86 تكتب في ذاكراتها الوسيطة وتحتاج ملكية حصرية لسطر الذاكرة الوسيطة، لذلك لا تحدث كتابة متزامنة حرفيًا إلى العنوان نفسه — لكن الكتابة التي تمتد عبر عدة أسطر قد تُمزَّق.
يسرد الفصل الرابع «Tools of the Trade» ما قد يفعله المُصرِّف بشيفرة متوازية غير حذرة: تمزيق التحميل والتخزين ودمجهما، وإعادة ترتيب الشيفرة، وتحميلات وتخزينات مختلقة، وتحويلات store-to-load، وحذف الشيفرة الميتة — ثم تأتي مفاجآت المعالج نفسه. أما الفصل الخامس «Counting» فهو جوهر الكتاب: نحو عشر طرق لكتابة برنامج تزيد فيه عدة خيوط عدّادًا واحدًا؛ وتُستبعد الزيادات الذرّية الساذجة بسبب أدائها السيئ، وينتهي الفصل بعدّاد signal-theft limit. وأكثر ما أعجب هيلوير العدّادات الإحصائية المعتمدة على مصفوفة لكل خيط: فهي تشبه أنواع البيانات المتماثلة الخالية من التعارض في الأنظمة الموزعة، وتُظهر كلفة المشاركة الزائفة (false sharing).
الحكم
الانتقاد الأساسي أن الأمثلة خاصة جدًا بنواة لينكس: فالعمل الذي أُنجز في C++11 وC11 لتقنين نماذج الذاكرة، مثل std::memory_order، لم يحصل إلا على فقرات قصيرة، بينما قُفزت نقاشات قديمة حول ما إذا كانت سباقات البيانات الحميدة أخطاءً. ولا تظهر البرمجة بلا أقفال إلا في الفصل 14، وترتيب الذاكرة في الفصل 15؛ وكان قد انتقل حينها إلى مصادر خارجية. كما أن الروابط الداخلية المفيدة لأسئلة التحقق الذاتي مزعجة على أجهزة القراءة الإلكترونية. ومع ذلك يعتبر هيلوير الكتاب ممتازًا: فقد أيقظ لديه الرغبة في تعلم المزيد، وموضوعه التالي سيكون جمع النفايات عالي الأداء.
SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي
نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.