Aktör yaşam döngüsü, otomatik çöp toplama ve el ile silme

Bir aktör, yöntemlerinden herhangi birine ilk kez çağrı yapıldığında etkinleştirilir. Yapılandırılabilir bir süre için kullanılmazsa bir aktör devre dışı bırakılır (Actors çalışma zamanı tarafından toplanan çöpler). Bir aktör ve durumu da istediğiniz zaman el ile silinebilir.

Aktör etkinleştirme

Bir aktör etkinleştirildiğinde aşağıdakiler gerçekleşir:

  • Bir aktör için bir çağrı geldiğinde ve biri henüz etkin değilse, yeni bir aktör oluşturulur.
  • Aktörün durumu, durumu korunıyorsa yüklenir.
  • OnActivateAsync (C#) veya onActivateAsync (Java) yöntemi (aktör uygulamasında geçersiz kılınabilir) çağrılır.
  • Aktör artık etkin olarak kabul edilir.

Aktör devre dışı bırakma

Bir aktör devre dışı bırakıldığında aşağıdakiler gerçekleşir:

  • Bir aktör bir süre kullanılmadığında, Etkin Aktörler tablosundan kaldırılır.
  • OnDeactivateAsync (C#) veya onDeactivateAsync (Java) yöntemi (aktör uygulamasında geçersiz kılınabilir) çağrılır. Bu, aktörün tüm zamanlayıcılarını temizler. Durum değişiklikleri gibi aktör işlemleri bu yöntemden çağrılmamalıdır.

İpucu

Doku Aktörleri çalışma zamanı , aktör etkinleştirme ve devre dışı bırakma ile ilgili bazı olayları yayar. Bunlar tanılama ve performans izlemede yararlıdır.

Aktör çöp toplama

Bir aktör devre dışı bırakıldığında, aktör nesnesine başvurular serbest bırakılır ve ortak dil çalışma zamanı (CLR) veya Java sanal makinesi (JVM) çöp toplayıcısı tarafından normal olarak çöp toplanabilir. Çöp toplama yalnızca aktör nesnesini temizler; aktörün State Manager'ında depolanan durumu kaldırmaz . Aktör bir sonraki etkinleştirildiğinde yeni bir aktör nesnesi oluşturulur ve durumu geri yüklenir.

Devre dışı bırakma ve çöp toplama amacıyla "kullanılmak" olarak ne sayılır?

  • Arama alma
  • IRemindable.ReceiveReminderAsync çağrılan yöntem (yalnızca aktör anımsatıcı kullanıyorsa geçerlidir)

Not

Aktör zamanlayıcıları kullanıyorsa ve zamanlayıcı geri çağırması çağrılırsa, "kullanılıyor" olarak sayılmaz.

Devre dışı bırakma ayrıntılarına geçmeden önce aşağıdaki terimleri tanımlamak önemlidir:

  • Tarama aralığı. Bu, Actors çalışma zamanının devre dışı bırakılabilir ve çöp toplanabilir aktörler için Etkin Aktörler tablosunu taradığı aralıktır. Bunun varsayılan değeri 1 dakikadır.
  • Boşta kalma zaman aşımı. Bu, bir aktörün devre dışı bırakılabilmesi ve çöp toplanabilmesi için önce kullanılmamış (boşta) kalması gereken süredir. Bunun varsayılan değeri 60 dakikadır.

Genellikle, bu varsayılanları değiştirmeniz gerekmez. Ancak, gerekirse Aktör Hizmetinizi kaydederken bu aralıklar değiştirilebilirActorServiceSettings:

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);
    }
}

Her etkin aktör için aktör çalışma zamanı boşta kalan süreyi (yani kullanılmamış) izler. Aktör çalışma zamanı, her bir aktörü ScanIntervalInSeconds , atık olarak toplanıp toplanmadığını görmek için denetler ve için IdleTimeoutInSecondsboştaysa işaretler.

Bir aktör her kullanıldığında boşta kalma süresi 0 olarak sıfırlanır. Bundan sonra, aktör yalnızca için yeniden boşta IdleTimeoutInSecondskalırsa çöp toplanabilir. Bir aktör arabirim yöntemi veya aktör anımsatıcı geri çağırması yürütülürse bir aktörün kullanıldığı kabul edilir. Süreölçer geri çağırması yürütülürse aktörün kullanıldığı kabul edilmez .

Aşağıdaki diyagramda bu kavramları göstermek için tek bir aktörün yaşam döngüsü gösterilmektedir.

Boşta kalma süresi örneği

Örnekte aktör yöntemi çağrılarının, anımsatıcıların ve zamanlayıcıların bu aktörün ömrü üzerindeki etkisi gösterilmektedir. Örnekle ilgili aşağıdaki noktalara değinilmesi gerekir:

  • ScanInterval ve IdleTimeout sırasıyla 5 ve 10 olarak ayarlanır. (Burada birimler önemli değildir, çünkü amacımız yalnızca kavramı göstermektir.)
  • Çöp toplanacak aktörler için tarama, 5 tarama aralığı tarafından tanımlandığı şekilde T=0,5,10,15,20,25'te gerçekleşir.
  • Düzenli bir zamanlayıcı T=4,8,12,16,20,24'te tetikler ve geri çağırması yürütülür. Aktörün boşta kalma süresini etkilemez.
  • T=7'deki bir aktör yöntemi çağrısı boşta kalma süresini 0'a sıfırlar ve aktörün çöp toplamasını geciktirır.
  • Aktör anımsatıcı geri çağırması T=14'te yürütülür ve aktörün çöp toplamasını daha da geciktirer.
  • T=25'teki çöp toplama taraması sırasında aktörün boşta kalma süresi sonunda 10'un boşta kalma zaman aşımını aşıyor ve aktör çöp olarak toplanıyor.

Bir aktör yöntemlerinden birini yürütürken hiçbir zaman çöp toplanmaz. Bu yöntem yürütülürken ne kadar zaman harcanırsa harcansın. Daha önce belirtildiği gibi, aktör arabirim yöntemlerinin ve anımsatıcı geri çağırmalarının yürütülmesi, aktörün boşta kalma süresini 0'a sıfırlayarak çöp toplamayı engeller. Zamanlayıcı geri çağırmalarının yürütülmesi boşta kalma süresini 0'a sıfırlamaz. Ancak, süreölçer geri çağırma yürütmeyi tamamlayana kadar aktörün çöp toplaması ertelenmiştir.

Aktörleri ve durumlarını el ile silme

Devre dışı bırakılan aktörlerin atık toplaması yalnızca aktör nesnesini temizler, ancak bir aktörün State Manager'ında depolanan verileri kaldırmaz. Bir aktör yeniden etkinleştirildiğinde verileri, State Manager aracılığıyla yeniden kullanılabilir hale getirilir. Aktörlerin Verileri State Manager'da depoladığı ve devre dışı bırakıldığı ancak hiçbir zaman yeniden etkinleştirilmediği durumlarda, verilerinin temizlenmesi gerekebilir. Aktörleri silme örnekleri için aktörleri ve durumlarını silme konusuna bakın.

Sonraki adımlar