Worker (işçi) öğelerini ve eş zamanlılığı anlama

Masaüstü platformları için Flash Player 11.4 ve sonraki sürümleri, Adobe AIR 13.4 ve sonraki sürümleri

Bir uygulama worker (işçi) öğelerini kullanmadığında, uygulamanın kodu, yürütme iş parçacığı olarak bilinen tek bir doğrusal yürütme adımları bloğunda yürütülür. İş parçacığı, geliştiricinin yazdığı kodu yürütür. Ayrıca, başta görüntüleme nesnelerinin özellikleri değiştiğinde ekranı güncelleyen kod olmak üzere, çalışma zamanının parçası olan kodun büyük kısmını da yürütür. Kod, yöntem ve sınıf olarak öbekler halinde yazılsa da çalışma zamanında kod, tek bir uzun adımlar dizisi olarak yazılmış gibi bir defada bir satır yürütür. Bir uygulamanın yürüttüğü adımlara ilişkin şu varsayımsal örneği ele alalım:

  1. Kareye gir: Çalışma zamanı, herhangi bir sayıda enterFrame olay işleyicisi çağırır ve kodlarını tek tek çalıştırır

  2. Fare olayı: Kullanıcı fareyi hareket ettirir ve çalışma zamanı, çeşitli üzerine gelme ve üzerinden gitme olayları oluştukça herhangi bir sayıda fare olay işleyicisini çağırır.

  3. Yükleme tamamlandı olayı: Bir url'den xml dosyası yükleme isteği, yüklü dosya verileriyle döner. Olay işleyicisi çağrılır ve xml içeriğini okuyarak ve xml verilerinden bir nesne kümesi oluşturarak adımlarını çalıştırır.

  4. Fare olayı: Fare tekrar hareket ettirildiğinden, çalışma zamanı ilgili fare olayı işleçlerini çağırır.

  5. Görüntü oluşturma: Artık bekleyen olay kalmadığından, çalışma zamanı ekranı görüntüleme nesnelerinde yapılan değişikliklere göre günceller.

  6. Kareye gir: Döngü tekrar başlar

Örnekte açıklandığı gibi, 1-5 arası varsayımsal adımlar, kare adı verilen tek bir zaman bloğunda sırayla çalıştırılır. Bunlar tek bir iş parçacığında sırayla çalıştırıldığı için, çalışma zamanı, işlemin bir adımını, başka bir adımını çalıştırmak üzere kesintiye uğratamaz. 30 kare/saniye değerindeki kare hızıyla, çalışma zamanı, tüm bu işlemleri yürütmek için saniyenin otuzda birinden az zamana sahiptir. Birçok durumda bu zaman, kodun çalıştırılması için yeterlidir ve çalışma zamanı kalan zaman boyunca yalnızca bekler. Ancak, adım 3'te yüklenen xml verilerinin çok büyük ve derin yuvalanmış bir xml yapısı olduğunu varsayalım. Kod, xml üzerinde döngü uyguladıkça ve nesneler oluşturdukça, bu işin yapılmasının saniyenin otuzda birinden uzun sürmesi olasıdır. Bu durumda, sonraki adımlar (fareye yanıt vermek ve ekranı yeniden çizmek) olması gereken hızda gerçekleştirilmez. Bu, kullanıcının fareyi hareket ettirmesine yanıt olarak ekran gereken hızda yeniden çizilmediğinden, ekranın donmasına ve takılmasına neden olur.

Kodun tamamı aynı iş parçacığında yürütülürse, zaman zaman takılma ve donma yaşanmasını önlemenin yalnızca bir yolu vardır. Bu yol, büyük bir veri kümesi üzerinde döngü uygulamak gibi uzun süre çalışan işlemleri yapmamaktır. ActionScript worker (işçi) öğeleri de bir başka çözüm sunmaktadır. Worker (işçi) kullanarak, uzun süre çalışan kodu ayrı bir worker (işçi) öğesinde çalıştırabilirsiniz. Her bir worker (işçi) ayrı bir iş parçacığında çalışır, böylece arka plandaki worker (işçi) öğesi, uzun süre çalışan işlemi kendi iş parçacığında gerçekleştirir. Bu durum, ana worker (işçi) öğesinin yürütme iş parçacığını, diğer işler tarafından engellenmeden her karede ekranı yeniden çizebilmesi için boşaltır.

Bu yolla aynı anda birden çok kod işlemi çalıştırma yeteneğine eş zamanlılık adı verilir. Arka plandaki worker (işçi) işini tamamladığında veya işlem boyunca "ilerleme" noktalarında olduğunda, ana worker (işçi) bildirimlerini ve verilerini gönderebilirsiniz. Bu şekilde, karmaşık veya zaman alan işlemler gerçekleştiren kodlar yazabilir ve aynı zamanda ekran donması gibi kötü bir kullanıcı deneyiminin önüne geçebilirsiniz.

Worker (işçi) öğeleri, ana görüntü oluşturma iş parçacığının başka bir kod tarafından engellenmesi nedeniyle kare hızının düşmesi olasılığını azalttığı için faydalıdır. Ancak, worker (işçi) öğeleri ek sistem belleği ve işlemci kullanımı gerektirir ve bu da genel uygulama performansı için maliyetli olabilir. Her worker (işçi) kendi çalışma zamanı sanal makinesi örneğini kullandığından, önemsiz bir worker (işçi) öğesinin ek yükü bile büyük olabilir. Worker (işçi) öğelerini kullanırken, kodunuzu tüm hedef platformlarınızda test ederek sisteme yüklenen taleplerin çok fazla olmadığından emin olun. Adobe, tipik bir senaryoda bir veya ikiden fazla arka plan worker (işçi) öğesi kullanmamanızı önerir.