0Pricing
Java Academy · درس

نموذج التزامن المنظّم

التعامل مع المهام المرتبطة كوحدة واحدة

نموذج التزامن المنظّم درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

ما التزامن المهيكل

يتعامل التزامن المهيكل (JEP 453، إصدار تجريبي) مع مجموعة من المهام المتزامنة ذات الصلة بوصفها وحدة عمل واحدة.

إذا قسمت المهمة الأب إلى مهام فرعية، فيجب أن تكتمل جميع هذه المهام قبل أن تتابع المهمة الأب تنفيذها، على نحو يشبه نطاق الكتلة في الشيفرة العادية.

المشكلة التي يحلها

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

يؤدي ذلك إلى تسرب الخيوط، والعمل اليتيم، ومعالجة مربكة لحالات الفشل.

المهام كشجرة

يفرض التزامن المهيكل علاقة بين الأب والابن. وتشكل المهام الفرعية شجرةً جذرها المهمة التي بدأتها.

  • لا يمكن لمهمة فرعية أن تستمر بعد انتهاء نطاق المهمة الأب
  • تنتظر المهمة الأب اكتمال جميع المهام الفرعية
  • ينتقل الإلغاء إلى أسفل الشجرة

محاكاة الشيفرة التسلسلية

الفكرة الأساسية هي أن تبدو الشيفرة المتزامنة مثل الشيفرة التسلسلية عند قراءتها. يُفتح نطاق، ويتفرع العمل، ولا يُغلق النطاق إلا بعد اكتمال كل شيء وانضمامه.

يجعل ذلك أعمار المهام واضحة، ويسهّل فهم الأخطاء.

الطريقة القديمة غير المهيكلة

إليك نهجًا مألوفًا لكنه غير مهيكل، باستخدام منفّذ عادي. يعمل هذا النهج، لكن لا يوجد ما يضمن أن كائني Future يشتركان في عمر منسّق.

import java.util.concurrent.*;

public class Main {
    public static void main(String[] args) throws Exception {
        try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
            Future<String> user = exec.submit(() -> "Ada");
            Future<Integer> order = exec.submit(() -> 7);
            System.out.println(user.get() + " has " + order.get() + " orders");
        }
    }
}

لماذا يهم التنسيق

في المثال السابق، إذا فشل جلب المستخدم، تواصل مهمة جلب الطلب تشغيلها بلا فائدة. يجب عليك إلغاؤها يدويًا ومعالجة الاستثناءات الناتجة عن كل استدعاء لـ get().

يؤتمت التزامن المهيكل عملية التنسيق هذه.

حالة الإصدار التجريبي

يتوفر التزامن المهيكل كـ واجهة API تجريبية في الحزمة java.util.concurrent. ولاستخدامه، يجب أن تُجمّع البرنامج وتشغّله باستخدام --enable-preview.

الفئة الأساسية هي StructuredTaskScope، وسيتناولها الدرس التالي.

ضمانات دورة الحياة

ضمن نطاق مُنظَّم:

  • تكتمل جميع المهام الفرعية أو تفشل أو تُلغى قبل خروج التنفيذ من النطاق
  • لا تتسرّب أي مهمة فرعية إلى الخلفية
  • تعكس مكدسات الاستدعاء التسلسل الهرمي الفعلي للمهام في تفريغات الخيوط

فائدة قابلية المراقبة

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

يتكامل جيدًا مع الخيوط الافتراضية

تعمل كل مهمة فرعية في نطاق مُنظَّم على خيط افتراضي خاص بها افتراضيًا. وتكلفة الخيوط الافتراضية المنخفضة هي ما يجعل توزيع العمل على عدد كبير من المهام الفرعية عمليًا.

صُممت الميزتان للعمل جنبًا إلى جنب.

النموذج الذهني

فكّر في النطاق المُنظَّم باعتباره كتلة try-with-resources للتزامن: تفتحه، ثم تنفّذ fork للعمل، ثم join للانتظار، وأخيرًا تغلقه. يضمن قوس الإغلاق عدم بقاء أي شيء قيد التشغيل.

تحقق سريع

اختبر مدى استيعابك للمبدأ الأساسي.

مراجعة

تعرّفت إلى نموذج التزامن المُنظَّم:

  • تشكّل المهام المرتبطة شجرةً مرتبطة بعمر النطاق
  • تُقرأ الشيفرة المتزامنة مثل الشيفرة التسلسلية
  • إنها واجهة برمجة تطبيقات تجريبية تتطلب --enable-preview
  • تتكامل طبيعيًا مع الخيوط الافتراضية

التالي: واجهة برمجة التطبيقات StructuredTaskScope نفسها.

الأسئلة الشائعة

هل درس «نموذج التزامن المنظّم» مجاني؟

نعم — نص درس «نموذج التزامن المنظّم» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «نموذج التزامن المنظّم»؟

التعامل مع المهام المرتبطة كوحدة واحدة تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «نموذج التزامن المنظّم»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. نموذج التزامن المنظّم
  2. StructuredTaskScope
  3. الإيقاف عند الفشل والنجاح
  4. معالجة الأخطاء والإلغاء
← العودة إلى Java Academy