دورة حياة الجهة الفاعلة، وتجميع البيانات المهملة تلقائياً، والحذف اليدوي

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

تفعيل الجهة الفاعلة

عند تنشيط إحدى الجهات الفاعلة، يحدث ما يلي:

  • عندما يأتي استدعاء لجهة فاعلة وواحدة غير نشطة بالفعل، يتم إنشاء جهة فاعلة جديدة.
  • يتم تحميل حالة الجهة الفاعلة إذا كانت تحافظ على الحالة.
  • يُستدعى الأسلوب OnActivateAsync (C#) أو الأسلوب onActivateAsync (Java) (الذي يمكن تجاوزه في تنفيذ الجهة الفاعلة).
  • تعتبر الجهة الفاعلة الآن نشطة.

إلغاء تنشيط الجهة الفاعلة

عند إلغاء تنشيط إحدى الجهات الفاعلة يحدث ما يلي:

  • عندما لا تُستخدم جهة فاعلة لفترة من الزمن، تتم إزالتها من جدول الجهات الفاعلة النشطة.
  • يُستدعى الأسلوب OnDeactivateAsync (C#) أو الأسلوب onDeactivateAsync (Java) (الذي يمكن تجاوزه في تنفيذ الجهة الفاعلة). هذا يزيل جميع الموقتات للجهة الفاعلة. لا ينبغي استدعاء عمليات الجهة الفاعلة مثل تغييرات الحالة من هذا الأسلوب.

تلميح

يصدر وقت تشغيل Fabric Actors بعض الأحداث المتعلقة بتنشيط الجهة الفاعلة وإلغاء تنشيطها. وهو أمر مفيد في التشخيص ومراقبة الأداء.

تجميع البيانات المهملة للجهة الفاعلة

عند إلغاء تنشيط إحدى الجهات الفاعلة، يتم إصدار إشارات إلى عنصر الجهة الفاعلة ويمكن أن تكون بيانات مهملة يتم جمعها بشكل طبيعي بواسطة جامع البيانات المهملة لوقت تشغيل اللغة العامة (CLR) أو جهاز Java ظاهري (JVM). ينظف تجميع البيانات المهملة عنصر الجهة الفاعلة فقط؛ ولا يزيل الحالة المخزنة في مدير حالة الجهة الفاعلة. في المرة التالية التي يتم فيها تنشيط الجهة الفاعلة، يتم إنشاء كائن جهة فاعلة جديدة واستعادة حالتها.

ما الذي يُعد "مستخدماً" لغرض إلغاء التنشيط وتجميع البيانات المهملة؟

  • تلقي استدعاء
  • الأسلوب IRemindable.ReceiveReminderAsync الذي يتم استدعاؤه (قابل للتطبيق فقط إذا كانت الجهة الفاعلة تستخدم تذكيرات)

ملاحظة

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

قبل أن ندخل في تفاصيل إلغاء التنشيط، من المهم تحديد المصطلحات التالية:

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

عادة، لا تحتاج إلى تغيير هذه الإعدادات الافتراضية. ومع ذلك، إذا لزم الأمر، يمكن تغيير هذه الفواصل الزمنية من خلال ActorServiceSettings عند تسجيل خدمة الجهة الفاعلة الخاصة بك:

public class Program
{
    public static void Main(string[] args)
    {
        ActorRuntime.RegisterActorAsync<MyActor>((context, actorType) =>
                new ActorService(context, actorType,
                    settings:
                        new ActorServiceSettings()
                        {
                            ActorGarbageCollectionSettings =
                                new ActorGarbageCollectionSettings(10, 2)
                        }))
            .GetAwaiter()
            .GetResult();
    }
}
public class Program
{
    public static void main(String[] args)
    {
        ActorRuntime.registerActorAsync(
                MyActor.class,
                (context, actorTypeInfo) -> new FabricActorService(context, actorTypeInfo),
                timeout);
    }
}

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

في أي وقت يتم فيه استخدام جهة فاعلة، تتم إعادة تعيين وقت الخمول إلى 0. بعد ذلك، لا يمكن تجميع البيانات المهلة للجهة الفاعلة إلا إذا ظلت خاملة مرة أخرى لـIdleTimeoutInSeconds. تذكر أن الجهة الفاعلة تعتبر مستخدمة إذا تم تنفيذ أسلوب واجهة الجهة الفاعلة أو رد اتصال تذكير الجهة الفاعلة. لا تعتبر الجهة الفاعلة مستخدمة إذا تم تنفيذ رد الاتصال المؤقت الخاص بها.

يوضح الرسم البياني التالي دورة حياة جهة فاعلة أحادية لتوضيح هذه المفاهيم.

مثال على وقت الخمول

يوضح المثال تأثير استدعاءات أسلوب الجهة الفاعلة والتذكيرات والموقتات على مدة بقاء هذه الجهة الفاعلة. النقاط التالية المتعلقة بالمثال جديرة بالذكر:

  • يتم تعيين ScanInterval وIdleTimeout إلى 5 و10 على التوالي. (الوحدات لا تهم هنا، لأن هدفنا هو فقط توضيح المفهوم.)
  • يتم إجراء الفحص بحثاً عن الجهات الفاعلة التي يتم جمع بياناتها المهلة عند T=0,5,10,15,20,25، كما هو محدد في الفاصل الزمني للفحص البالغ 5.
  • يعمل مؤقت دوري عند T=4,8,12,16,20,24، ويتم تنفيذ رد الاتصال. لا يؤثر على وقت الخمول للجهة الفاعلة.
  • يقوم استدعاء أسلوب الجهة الفاعلة في T=7 بإعادة تعيين وقت الخمول إلى 0 ويؤخر تجميع البيانات المهملة للجهة الفاعلة.
  • يتم تنفيذ رد اتصال تذكير الجهة الفاعلة في T=14 وتؤخر تجميع البيانات المهملة للجهة الفاعلة أكثر.
  • أثناء فحص تجميع البيانات المهملة في T=25، يتجاوز وقت خمول الجهة الفاعلة أخيراً مهلة خمول من 10، ويتم تجميع البيانات المهملة للجهة الفاعلة.

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

حذف الجهات الفاعلة وحالتها يدوياً

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

الخطوات التالية