يعد فهم مفاهيم تعدد العمليات الأساسية أمرًا بالغ الأهمية لمطوري البرامج، لأنه لا يعزز مجموعة المهارات فحسب، بل يؤثر أيضًا بشكل مباشر على تطوير التطبيقات وقابلية التوسع والجودة الشاملة لحلول البرامج.
في سياق تعدد العمليات، تضمن العمليات الذرية أن الخيط يمكنه تنفيذ سلسلة من الإجراءات دون مقاطعة من سلاسل الرسائل الأخرى. قد تحاول مؤشرات الترابط المتعددة قراءة البيانات المشتركة أو كتابتها في وقت واحد. بدون الذرية، يمكن أن تؤدي التعديلات المتزامنة إلى نتائج غير متناسقة أو غير متوقعة، والمعروفة باسم ظروف السباق.
تضمن مواصفات Java أن "القراءة" و"الكتابة" هما عمليتان ذريتان وليس مجموعتهما. لذا فإن العملية التي "تقرأ وتضيف 1 ثم تكتب النتيجة مرة أخرى" ليست ذرية وفقًا للمواصفات. تسمى هذه العمليات بالعمليات المركبة وعادة ما تحتاج إلى أن تكون ذرية في سياق استخدامها في الكود الخاص بنا.
أمثلة على العمليات الذرية:
زيادة عداد : إذا قام خيطان بزيادة عداد في نفس الوقت دون ذرية، فيمكنهما قراءة نفس القيمة وإعادة كتابة نفس القيمة المتزايدة، مما يؤدي إلى فقدان واحد زيادة.
تحديث متغير مشترك : إذا كان أحد المواضيع يقرأ قيمة بينما يقوم آخر بتعديلها، بدون ذرية، قد يحصل مؤشر ترابط القراءة على قيمة غير متسقة.
تحقيق الذرية:
الفئات الذرية: توفر العديد من لغات البرمجة فئات ذرية (على سبيل المثال، AtomicIntegerin Java) التي تغلف العمليات التي يضمن أنها ذرية.
الأساليب/الكتل المتزامنة: في لغات مثل Java، يمكنك استخدام الكلمة الأساسية المتزامنة للتأكد من أن مؤشر ترابط واحد فقط يمكنه تنفيذ كتلة من التعليمات البرمجية أو طريقة في المرة الواحدة.
الأقفال : استخدام الأقفال الصريحة (على سبيل المثال، ReentrantLockin Java) لإدارة الوصول إلى الموارد المشتركة.
فوائد
تشير الثبات إلى خاصية الكائن الذي لا يمكن تعديل حالته بعد إنشائه. في البرمجة، الكائنات غير القابلة للتغيير هي تلك التي، بمجرد تهيئتها، لا يمكن تغييرها أو تغييرها. بدلاً من تعديل كائن غير قابل للتغيير، يتم إنشاء كائن جديد بالتغييرات المطلوبة.
غير قابل للتغيير يعني أنه بمجرد انتهاء مُنشئ الكائن من التنفيذ، لا يمكن تغيير هذا المثيل.
خصائص الكائنات غير القابلة للتغيير
لا يوجد تغيير في الحالة: بمجرد إنشاء كائن غير قابل للتغيير، تظل حالته (السمات أو الحقول) ثابتة طوال عمره.
مؤشر الترابط الآمن: يمكن مشاركة الكائنات غير القابلة للتغيير بأمان بين سلاسل رسائل متعددة دون الحاجة إلى المزامنة، حيث لا يمكن تعديلها.
استقرار رمز التجزئة: يظل رمز التجزئة للكائن غير القابل للتغيير كما هو طوال عمره، مما يجعله مناسبًا للاستخدام في المجموعات القائمة على التجزئة مثل HashMap أو HashSet.
تحقيق الثبات:
public record ImmutablePoint(int x, int y) {}
جافا: Collections.unmodifiableList(), List.of(), Set.of()
C#: ImmutableList, ImmutableArray from System.Collections.Immutable
بايثون: الصفوف غير قابلة للتغيير بطبيعتها.
استخدم الحقول النهائية: قم بتعريف حقول الفصل على أنها نهائية. وهذا يضمن أنه لا يمكن تعيين الحقول إلا مرة واحدة، أثناء إنشاء الكائن.
لا توجد أدوات ضبط: تجنب توفير طرق ضبط للحقول القابلة للتغيير. وهذا يمنع التعليمات البرمجية الخارجية من تغيير حالة الكائن بعد إنشائه.
public final class ImmutablePoint { private final int x; private final int y; public ImmutablePoint(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public int getY() { return y; } }
أساليب المصنع الثابتة: بدلاً من توفير مُنشئ عام، استخدم أساليب المصنع الثابتة التي تُرجع مثيلات جديدة للكائن، مما يوضح أنه لا يمكن تغيير الحالة
نمط المنشئ (للكائنات المعقدة): بالنسبة للكائنات التي تتطلب العديد من المعلمات، استخدم نمط المنشئ لإنشاء كائنات غير قابلة للتغيير. يقوم المنشئ بتجميع المعلمات وإنشاء نسخة غير قابلة للتغيير في النهاية.
فوائد
التزامن: إذا كانت البنية الداخلية للكائن غير القابل للتغيير صالحة، فستكون صالحة دائمًا. ليس هناك احتمال أن تتمكن سلاسل الرسائل المختلفة من إنشاء حالة غير صالحة داخل هذا الكائن. ومن ثم، فإن الكائنات غير القابلة للتغيير هي خيط آمن.
جمع البيانات المهملة: من الأسهل بكثير على جامع البيانات المهملة اتخاذ قرارات منطقية بشأن الكائنات غير القابلة للتغيير.
إن تسليح نفسك بهذه المعرفة لا يعزز قدرتك على كتابة تعليمات برمجية عالية الأداء فحسب، بل يؤهلك أيضًا لمواجهة تحديات تطوير البرامج الحديثة، حيث تكون الاستجابة وقابلية التوسع أمرًا بالغ الأهمية. بينما تواصل رحلتك إلى عالم تعدد العمليات، تذكر أن كل مفهوم تتقنه سيساهم في نموك كمطور وقدرتك على إنشاء تطبيقات تلبي توقعات المستخدمين وتتجاوزها.
ابق معنا حيث سنركز على المجاعة، والجمود، وحالة السباق، وجدولة نظام التشغيل وغير ذلك الكثير في المقالات القادمة، والتي من شأنها أن ترفع مهاراتك في البرمجة وتعزز حياتك المهنية!
شكرًا جزيلًا للتوثيق عبر الإنترنت والمجتمع وجميع الموارد المتاحة التي جعلت هذه الكتابة ممكنة.
إخلاء المسؤولية: هذه المقالة مدعومة بالذكاء الاصطناعي. تم تنظيم وبحث بنية المقالة وقائمة الأفكار يدويًا بنسبة 100٪. أقوم بمراجعة جميع النصوص التي تم إنشاؤها بواسطة الذكاء الاصطناعي لضمان دقة المعلومات ولإضافة بعض السياقات
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3