Eş zamanlı olmayan işlemler

Kullanılabildiğinde, işlemlerin eş zamanlı olanları yerine eş zamanlı olmayan versiyonlarını kullanmayı tercih edin.

Senkronize işlemler, kodunuz tarafından belirtilir belirtilmez çalışır ve kod, devam etmeden önce bu işlemlerin tamamlanmasını bekler. Sonuç olarak, işlemler kare döngüsünün uygulama kodu aşamasında çalışır. Senkronize olmayan bir işlem fazla uzun sürerse, kare döngüsünün boyutunu uzatır, böylece potansiyel olarak görüntünün kilitlenmiş veya kesilmiş gibi görünmesine yol açar.

Kodunuz senkronize olmayan bir işlem çalıştırırken, hemen çalışmayabilir. Geçerli çalıştırma iş parçacığındaki kodunuz ve diğer uygulama kodları çalıştırılmaya devam eder. Ardından çalışma zamanı, bir yandan oluşturma sorunlarını önlemeye çalışırken, işlemi mümkün olduğunca çabuk gerçekleştirir. Bazı durumlarda, çalıştırma arka planda gerçekleşir ve hiç bir şekilde çalışma zamanı kare döngüsünün bir parçası olarak çalışmaz. Son olarak, işlem bittiğinde çalışma zamanı bir olay gönderir ve kodunuz o olayı daha fazla iş yapmak için dinleyebilir.

Oluşturma sorunlarının önlenmesi için, senkronize olmayan işlemler programlanır ve bölünür. Bundan dolayı, işlemlerin senkronize olmayan versiyonlarını kullanan ve buna göre yanıt veren bir uygulamaya sahip olmak çok daha kolaydır. Daha fazla bilgi için bkz. Algılanan performans ile gerçek performansın karşılaştırılması .

Ancak, eş zamanlı olarak çalışmayan işlemlerde ek yük vardır. Gerçek yürütme zamanı, eş zamanlı olmayan işlemlerde, özellikle tamamlanması kısa süren işlemlerde daha uzun olabilir.

Çalışma zamanında, bir çok işlem yapısı gereği senkronizedir veya değildir ve onların çalıştırılma şeklini belirleyemezsiniz. Ancak, Adobe AIR’de, senkronize olan veya olmayan bir şekilde yapmayı seçebileceğiniz üç işlem türü vardır.

  • File ve FileStream sınıfı işlemleri

    File sınıfının bir çok işlemi senkronize olan veya olmayan bir şekilde yapılabilir. Örneğin, bir dosya veya dizinin kopyalanması veya silinmesi ve bir dizinin içeriğinin listelenmesi gibi işlemlerin senkronize olmayan versiyonları da vardır. Bu yöntemlerin eş zamanlı olmayan sürümlerinin adında “Async” soneki vardır. Örneğin, bir dosyayı senkronize olmayan bir şekilde silmek için, File.deleteFile() yöntemi yerine File.deleteFileAsync() yöntemini çağırın.

    Bir dosyadan okumak veya dosyaya yazmak için FileStream nesnesini kullandığınızda, FileStream nesnesini açış şekliniz işlemlerin senkronize olmayan bir şekilde çalışıp çalışmadığını belirler. Senkronize olmayan işlemler için FileStream.openAsync() yöntemini kullanın. Veri yazma işlemi senkronize olmayan bir şekilde yapılır. Veri okuma parçalar halinde yapılır, bu yüzden veri bir seferde bir bölüm olarak mevcut olur. Bunun tersine, senkronize modda FileStream nesnesi kodun çalışması devam etmeden önce dosyanın tamamını okur.

  • Yerel SQL veritabanı işlemleri

    Yerel bir SQL veritabanıyla çalışırken, bir SQLConnection nesnesi üzerinden çalıştırılan tüm işlemler senkronize olan veya olmayan modda çalışır. İşlemlerin senkronize olmayan şekilde çalışmasını belirlemek için, SQLConnection.open() yöntemi yerine SQLConnection.openAsync() yöntemini çağırarak veritabanına olan bağlantıyı açın. Veritabanı işlemleri senkronize olmayan bir şekilde çalıştığında, arka planda çalışır. Veritabanı motoru asla çalışma zamanı kare döngüsünde çalışmaz, bu nedenle veritabanı işlemlerinin oluşturma sorunlarına neden olması çok daha düşük bir olasılıktır.

    Yerel SQL veritabanıyla performansı iyileştirmeye yönelik ek stratejiler için bkz. SQL veritabanı performansı .

  • Ayrı Pixel Bender gölgelendiricileri

    ShaderJob sınıfı Pixel Bender gölgelendiricisi üzerinden bir görüntüyü veya veri kümesini çalıştırmanıza ve ortaya çıkan ham verilere erişmenize olanak tanır. Varsayılan olarak, ShaderJob.start() yöntemini çağırdığınızda, gölgelendirici senkronize olmayan bir şekilde çalışır. Çalıştırma işlemi arka planda, çalışma zamanı kare döngüsünü kullanmadan gerçekleşir. ShaderJob nesnesini senkronize bir şekilde çalışmaya zorlamak için (önerilmez), true değerini start() yönteminin ilk parametresine iletin.

Kodun senkronize olmayan şekilde çalıştırılmasına yönelik bu dahili mekanizmalara ek olarak, kendi kodunuzu senkronize yerine senkronize olmayan bir biçimde çalışacak şekilde yapılandırabilirsiniz. Uzun çalışabilecek bir görevi yerine getirecek bir kod yazıyorsanız, kodunuzu parçalar halinde çalışacak şekilde yapılandırabilirsiniz. Kodunuzu parçalara bölmeniz, çalışma zamanının oluşturma işlemlerini kod çalıştırma bloklarınızın aralarında yapmasını, böylece oluşturma sorunlarının meydana gelme olasılığının düşmesini sağlayabilir.

Kodunuzu bölmeye yönelik bazı teknikler daha sonraki bölümlerde listelenmiştir. Bu tekniklerin ardında yatan ana fikir, kodunuzun herhangi bir zamanda işinin yalnızca bir kısmını yapacak şekilde yazılmasıdır. Kodun ne yaptığını ve nerede çalışmayı kestiğini takip edersiniz. Yapılacak iş kalıp kalmadığını devamlı kontrol etmek için Timer nesnesi gibi bir mekanizma kullanın ve ek işi, iş tamamlanana kadar parçalar halinde yapın.

Kodu işi bu şekilde bölmek amacıyla yapılandırmak için kurulmuş birkaç yapı vardır. Aşağıdaki makaleler ve kod kütüphaneleri bu yapıları açıklar ve uygulamalarınıza eklemenize yardımcı olmak için gerekli kodu sağlar.

  • Asynchronous ActionScript Execution (ActionScript’in Senkronize Olmayan Şekilde Çalıştırılması) (Trevor McCauley tarafından bazı uygulama örneklerinin yanı sıra daha fazla arka plan ayrıntısı ile hazırlanmış bir makale)

  • Parsing & Rendering Lots of Data in Flash Player (Flash Player’da Bir Çok Verinin Ayrıştırılması & Oluşturulması) (Jesse Warden tarafından arka plan ayrıntıları ve “oluşturucu deseni” ve “yeşil parçacıklar” adlı iki yaklaşımın örnekleri ile yazılmış bir makale)

  • Green Threads (Yeşil Parçacıklar) (Drew Cummins tarafından yazılmış, örnek kaynak kod ile “yeşil parçacıklar” tekniğini açıklayan bir makale)

  • greenthreads (ActionScript’te “yeşil parçacıklar”ın uygulanması için Charlie Hubbard tarafından hazırlanmış açık kaynaklı bir kod kütüphanesi. Daha fazla bilgi için bkz. greenthreads Quick Start (yeşil parçacıklar Hızlı Başlangıç).)

  • ActionScript 3'teki İş Parçacıkları: http://www.adobe.com/go/learn_fp_as3_threads_tr (“sahte iş parçacığı oluşturma” tekniğinin örnek uygulamasını da içeren bir Alex Harui makalesi)