"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تعدد العمليات: المفاهيم الأساسية للمهندسين - الجزء الأول

تعدد العمليات: المفاهيم الأساسية للمهندسين - الجزء الأول

تم النشر بتاريخ 2024-11-08
تصفح:288

Multithreading : Key Concepts for Engineers - Part 1

يعد فهم مفاهيم تعدد العمليات الأساسية أمرًا بالغ الأهمية لمطوري البرامج، لأنه لا يعزز مجموعة المهارات فحسب، بل يؤثر أيضًا بشكل مباشر على تطوير التطبيقات وقابلية التوسع والجودة الشاملة لحلول البرامج.

الذرية

في سياق تعدد العمليات، تضمن العمليات الذرية أن الخيط يمكنه تنفيذ سلسلة من الإجراءات دون مقاطعة من سلاسل الرسائل الأخرى. قد تحاول مؤشرات الترابط المتعددة قراءة البيانات المشتركة أو كتابتها في وقت واحد. بدون الذرية، يمكن أن تؤدي التعديلات المتزامنة إلى نتائج غير متناسقة أو غير متوقعة، والمعروفة باسم ظروف السباق.

تضمن مواصفات Java أن "القراءة" و"الكتابة" هما عمليتان ذريتان وليس مجموعتهما. لذا فإن العملية التي "تقرأ وتضيف 1 ثم تكتب النتيجة مرة أخرى" ليست ذرية وفقًا للمواصفات. تسمى هذه العمليات بالعمليات المركبة وعادة ما تحتاج إلى أن تكون ذرية في سياق استخدامها في الكود الخاص بنا.

أمثلة على العمليات الذرية:

  1. زيادة عداد : إذا قام خيطان بزيادة عداد في نفس الوقت دون ذرية، فيمكنهما قراءة نفس القيمة وإعادة كتابة نفس القيمة المتزايدة، مما يؤدي إلى فقدان واحد زيادة.

  2. تحديث متغير مشترك : إذا كان أحد المواضيع يقرأ قيمة بينما يقوم آخر بتعديلها، بدون ذرية، قد يحصل مؤشر ترابط القراءة على قيمة غير متسقة.

تحقيق الذرية:

  • الفئات الذرية: توفر العديد من لغات البرمجة فئات ذرية (على سبيل المثال، AtomicIntegerin Java) التي تغلف العمليات التي يضمن أنها ذرية.

  • الأساليب/الكتل المتزامنة: في لغات مثل Java، يمكنك استخدام الكلمة الأساسية المتزامنة للتأكد من أن مؤشر ترابط واحد فقط يمكنه تنفيذ كتلة من التعليمات البرمجية أو طريقة في المرة الواحدة.

  • الأقفال : استخدام الأقفال الصريحة (على سبيل المثال، ReentrantLockin Java) لإدارة الوصول إلى الموارد المشتركة.

فوائد

  • الأداء: توفر الفئات في java.util.concurrent.atomic أيضًا أسلوبًا خاليًا من القفل لضمان سلامة الخيط، مما يجعلها خيارًا مفضلاً في العديد من السيناريوهات.
  • البساطة: يؤدي استخدام الفئات الذرية إلى تبسيط التعليمات البرمجية، حيث لا يحتاج المطورون إلى إدارة الأقفال ويمكنهم التركيز على منطق البرنامج.
  • سلامة الموضوع: تضمن العمليات الذرية تحديث المتغيرات بأمان عبر سلاسل رسائل متعددة دون التعرض لخطر تلف البيانات أو حالات السباق.

ثبات

تشير الثبات إلى خاصية الكائن الذي لا يمكن تعديل حالته بعد إنشائه. في البرمجة، الكائنات غير القابلة للتغيير هي تلك التي، بمجرد تهيئتها، لا يمكن تغييرها أو تغييرها. بدلاً من تعديل كائن غير قابل للتغيير، يتم إنشاء كائن جديد بالتغييرات المطلوبة.

غير قابل للتغيير يعني أنه بمجرد انتهاء مُنشئ الكائن من التنفيذ، لا يمكن تغيير هذا المثيل.

خصائص الكائنات غير القابلة للتغيير

  • لا يوجد تغيير في الحالة: بمجرد إنشاء كائن غير قابل للتغيير، تظل حالته (السمات أو الحقول) ثابتة طوال عمره.

  • مؤشر الترابط الآمن: يمكن مشاركة الكائنات غير القابلة للتغيير بأمان بين سلاسل رسائل متعددة دون الحاجة إلى المزامنة، حيث لا يمكن تعديلها.

  • استقرار رمز التجزئة: يظل رمز التجزئة للكائن غير القابل للتغيير كما هو طوال عمره، مما يجعله مناسبًا للاستخدام في المجموعات القائمة على التجزئة مثل HashMap أو HashSet.

تحقيق الثبات:

  • استخدام السجلات (في Java 14 ): في Java، توفر ميزة السجل طريقة موجزة لإنشاء فئات بيانات غير قابلة للتغيير.
public record ImmutablePoint(int x, int y) {}
  • استخدام هياكل البيانات غير القابلة للتغيير: استخدم هياكل البيانات غير القابلة للتغيير الموجودة والتي توفرها لغة البرمجة أو المكتبات، مثل:
  1. جافا: Collections.unmodifiableList(), List.of(), Set.of()

  2. C#: ImmutableList, ImmutableArray from System.Collections.Immutable

  3. بايثون: الصفوف غير قابلة للتغيير بطبيعتها.

  • استخدم الحقول النهائية: قم بتعريف حقول الفصل على أنها نهائية. وهذا يضمن أنه لا يمكن تعيين الحقول إلا مرة واحدة، أثناء إنشاء الكائن.

  • لا توجد أدوات ضبط: تجنب توفير طرق ضبط للحقول القابلة للتغيير. وهذا يمنع التعليمات البرمجية الخارجية من تغيير حالة الكائن بعد إنشائه.

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;
    }
}
  • أساليب المصنع الثابتة: بدلاً من توفير مُنشئ عام، استخدم أساليب المصنع الثابتة التي تُرجع مثيلات جديدة للكائن، مما يوضح أنه لا يمكن تغيير الحالة

  • نمط المنشئ (للكائنات المعقدة): بالنسبة للكائنات التي تتطلب العديد من المعلمات، استخدم نمط المنشئ لإنشاء كائنات غير قابلة للتغيير. يقوم المنشئ بتجميع المعلمات وإنشاء نسخة غير قابلة للتغيير في النهاية.

فوائد

  • التزامن: إذا كانت البنية الداخلية للكائن غير القابل للتغيير صالحة، فستكون صالحة دائمًا. ليس هناك احتمال أن تتمكن سلاسل الرسائل المختلفة من إنشاء حالة غير صالحة داخل هذا الكائن. ومن ثم، فإن الكائنات غير القابلة للتغيير هي خيط آمن.

  • جمع البيانات المهملة: من الأسهل بكثير على جامع البيانات المهملة اتخاذ قرارات منطقية بشأن الكائنات غير القابلة للتغيير.

خاتمة

إن تسليح نفسك بهذه المعرفة لا يعزز قدرتك على كتابة تعليمات برمجية عالية الأداء فحسب، بل يؤهلك أيضًا لمواجهة تحديات تطوير البرامج الحديثة، حيث تكون الاستجابة وقابلية التوسع أمرًا بالغ الأهمية. بينما تواصل رحلتك إلى عالم تعدد العمليات، تذكر أن كل مفهوم تتقنه سيساهم في نموك كمطور وقدرتك على إنشاء تطبيقات تلبي توقعات المستخدمين وتتجاوزها.

ابق معنا حيث سنركز على المجاعة، والجمود، وحالة السباق، وجدولة نظام التشغيل وغير ذلك الكثير في المقالات القادمة، والتي من شأنها أن ترفع مهاراتك في البرمجة وتعزز حياتك المهنية!

مراجع

شكرًا جزيلًا للتوثيق عبر الإنترنت والمجتمع وجميع الموارد المتاحة التي جعلت هذه الكتابة ممكنة.

  1. إنفوجرافيك
  2. فهم المفاهيم الأساسية لتعدد العمليات
  3. الذرية
  4. ما هو غير قابل للتغيير

إخلاء المسؤولية: هذه المقالة مدعومة بالذكاء الاصطناعي. تم تنظيم وبحث بنية المقالة وقائمة الأفكار يدويًا بنسبة 100٪. أقوم بمراجعة جميع النصوص التي تم إنشاؤها بواسطة الذكاء الاصطناعي لضمان دقة المعلومات ولإضافة بعض السياقات

بيان الافراج تم نشر هذه المقالة على: https://dev.to/anwaar/multithreading-key-concepts-for-engineers-part-1-4g73?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3