Diş Açma Modelleri

oneway olarak işaretlenen yöntemler engellemez. oneway olarak işaretlenmeyen yöntemler için, istemcinin yöntem çağrısı, sunucu yürütmeyi tamamlayana veya eşzamanlı geri çağırma (hangisi önce gelirse) çağrılana kadar engellenecektir. Sunucu yöntemi uygulamaları en fazla bir eşzamanlı geri aramayı çağırabilir; fazladan geri arama çağrıları atılır ve hata olarak kaydedilir. Bir yöntemin geri çağırma yoluyla değer döndürmesi gerekiyorsa ve geri çağırmayı çağırmıyorsa, bu bir hata olarak günlüğe kaydedilir ve istemciye bir aktarım hatası olarak rapor edilir.

Geçiş modundaki konular

Geçiş modunda çoğu çağrı senkronizedir. Ancak oneway çağrıların istemciyi engellememesi yönündeki amaçlanan davranışı korumak için her işlem için bir iş parçacığı oluşturulur. Ayrıntılar için HIDL genel bakışına bakın.

Bağlayıcı hale getirilmiş HAL'lerdeki iplikler

Gelen RPC çağrılarına (HAL'lerden HAL kullanıcılarına eşzamansız geri aramalar dahil) ve ölüm bildirimlerine hizmet vermek için, HIDL kullanan her işlemle bir iş parçacığı havuzu ilişkilendirilir. Tek bir işlem birden fazla HIDL arabirimi ve/veya ölüm bildirimi işleyicisi uyguluyorsa iş parçacığı havuzu bunların tümü arasında paylaşılır. Bir süreç istemciden gelen bir yöntem çağrısı aldığında, iş parçacığı havuzundan boş bir iş parçacığı seçer ve çağrıyı bu iş parçacığı üzerinde yürütür. Boş iş parçacığı yoksa, boş iş parçacığı mevcut olana kadar bloke eder.

Sunucuda yalnızca bir iş parçacığı varsa, sunucuya yapılan çağrılar sırayla tamamlanır. Birden fazla iş parçacığına sahip bir sunucu, istemcide yalnızca bir iş parçacığı olsa bile çağrıları sıra dışı tamamlayabilir. Ancak belirli bir arayüz nesnesi için oneway çağrıların sıralanması garanti edilir (bkz . Sunucu iş parçacığı modeli ). Birden çok arabirimi barındıran çok iş parçacıklı bir sunucu için, farklı arabirimlere yapılan oneway çağrılar birbirleriyle veya diğer engelleme çağrılarıyla eş zamanlı olarak işlenebilir.

Aynı hwbinder iş parçacığında birden çok iç içe çağrı gönderilecektir. Örneğin, eğer bir süreç (A), bir hwbinder iş parçacığından (B) sürecine senkron bir çağrı yaparsa ve ardından (B) işlemi, (A) işlemine senkronize bir geri çağrı yaparsa, çağrı orijinal hwbinder iş parçacığında yürütülecektir. (A)'da orijinal çağrıda engellenen. Bu optimizasyon, iç içe çağrıları yönetebilen tek iş parçacıklı bir sunucuya sahip olmayı mümkün kılar, ancak çağrıların başka bir IPC çağrı dizisi üzerinden geçtiği durumları kapsamaz. Örneğin, (B) işlemi, (C) işlemine çağrılan bir bağlayıcı/vndbinder çağrısı yaptıysa ve ardından (C) işlemi (A)'ya geri çağrı yaptıysa, bu işlem (A)'daki orijinal iş parçacığında sunulamaz.

Sunucu iş parçacığı modeli

Geçiş modu dışında, HIDL arayüzlerinin sunucu uygulamaları istemciden farklı bir süreçte yaşar ve gelen yöntem çağrılarını bekleyen bir veya daha fazla iş parçacığına ihtiyaç duyar. Bu iş parçacıkları sunucunun iş parçacığı havuzudur; sunucu, iş parçacığı havuzunda kaç iş parçacığının çalışmasını istediğine karar verebilir ve arayüzlerindeki tüm çağrıları serileştirmek için bir iş parçacığı havuzu boyutunu kullanabilir. Sunucunun iş parçacığı havuzunda birden fazla iş parçacığı varsa, herhangi bir arabirimden eşzamanlı gelen çağrıları alabilir (C++'da bu, paylaşılan verilerin dikkatli bir şekilde kilitlenmesi gerektiği anlamına gelir).

Aynı arayüze yapılan tek yönlü çağrılar serileştirilir. Çok iş parçacıklı bir istemci, IFoo arabiriminde method1 ve method2 ve IBar arabiriminde method3 çağırırsa, method1 ve method2 her zaman serileştirilir, ancak method3 method1 ve method2 ile paralel olarak çalışabilir.

Tek bir istemci yürütme iş parçacığı, birden çok iş parçacığı içeren bir sunucuda iki şekilde eşzamanlı yürütmeye neden olabilir:

  • oneway aramalar engellenmez. oneway bir çağrı yürütülürse ve ardından oneway olmayan bir çağrı yapılırsa, sunucu oneway çağrıyı ve tek oneway olmayan çağrıyı aynı anda yürütebilir.
  • Verileri senkronize geri aramalarla geri ileten sunucu yöntemleri, sunucudan geri arama çağrıldığı anda istemcinin engellemesini kaldırabilir.

İkinci yol için, sunucu fonksiyonunda geri arama çağrıldıktan sonra çalıştırılan herhangi bir kod, sunucunun istemciden gelen sonraki çağrıları işlemesi ile eş zamanlı olarak yürütülebilir. Bu, sunucu işlevindeki kodu ve işlevin sonunda çalıştırılan otomatik yıkıcıları içerir. Sunucunun iş parçacığı havuzunda birden fazla iş parçacığı varsa, çağrılar yalnızca tek bir istemci iş parçacığından gelse bile eşzamanlılık sorunları ortaya çıkar. (Bir işlem tarafından sunulan herhangi bir HAL birden fazla iş parçacığına ihtiyaç duyuyorsa, iş parçacığı havuzu işlem başına paylaşıldığı için tüm HAL'ler birden fazla iş parçacığına sahip olacaktır.)

Sunucu sağlanan geri aramayı çağırdığında, aktarım istemcide uygulanan geri aramayı arayabilir ve istemcinin engellemesini kaldırabilir. İstemci, geri aramayı çağırdıktan sonra sunucu uygulamasının yaptığı her şeye paralel olarak ilerler (buna, yıkıcıların çalıştırılması da dahil olabilir). Geri aramadan sonra sunucu işlevindeki kod artık istemciyi engellemiyor (sunucu iş parçacığı havuzu, gelen çağrıları işlemek için yeterli iş parçacığına sahip olduğu sürece), ancak istemciden gelecek çağrılarla eşzamanlı olarak yürütülebilir (sunucu iş parçacığı havuzunda yalnızca bir iş parçacığı olmadığı sürece) ).

Senkronize geri aramalara ek olarak, tek iş parçacıklı bir istemciden gelen oneway çağrılar, iş parçacığı havuzunda birden fazla iş parçacığı bulunan bir sunucu tarafından eşzamanlı olarak işlenebilir, ancak yalnızca bu oneway çağrıların farklı arayüzlerde yürütülmesi durumunda. Aynı arayüzdeki oneway çağrılar her zaman serileştirilir.

Not: Sunucu işlevlerinin, geri çağırma işlevini çağırır çağırmaz geri dönmelerini önemle tavsiye ederiz.

Örneğin (C++'da):

Return<void> someMethod(someMethod_cb _cb) {
    // Do some processing, then call callback with return data
    hidl_vec<uint32_t> vec = ...
    _cb(vec);
    // At this point, the client's callback will be called,
    // and the client will resume execution.
    ...
    return Void(); // is basically a no-op
};

İstemci iş parçacığı modeli

İstemcideki iş parçacığı modeli, engellemeyen çağrılar ( oneway anahtar sözcükle işaretlenen işlevler) ve engelleme çağrıları ( oneway anahtar sözcüğü belirtilmeyen işlevler) arasında farklılık gösterir.

Aramaları engelleme

Aramaları engellemek için istemci aşağıdakilerden biri gerçekleşene kadar bloke eder:

  • Aktarım hatası oluşuyor; Return nesnesi, Return::isOk() ile alınabilecek bir hata durumu içerir.
  • Sunucu uygulaması geri aramayı çağırır (eğer varsa).
  • Sunucu uygulaması bir değer döndürür (geri çağırma parametresi yoksa).

Başarılı olması durumunda, istemcinin argüman olarak ilettiği geri çağırma işlevi, işlevin kendisi dönmeden önce her zaman sunucu tarafından çağrılır. Geri çağırma, işlev çağrısının yapıldığı aynı iş parçacığı üzerinde yürütülür, bu nedenle uygulayıcıların işlev çağrıları sırasında kilitleri tutarken dikkatli olmaları (ve mümkün olduğunda bunlardan tamamen kaçınmaları) gerekir. generates deyimi veya oneway anahtar sözcüğü olmayan bir işlev hâlâ engelliyor; istemci, sunucu bir Return<void> nesnesi döndürene kadar bloke eder.

Tek yönlü aramalar

Bir işlev oneway olarak işaretlendiğinde, istemci hemen geri döner ve sunucunun işlev çağrısı çağrısını tamamlamasını beklemez. Görünüşte (ve toplamda), bu, işlev çağrısının kodun yarısını yürüttüğü için yarı süre aldığı anlamına gelir, ancak performansa duyarlı uygulamalar yazarken bunun bazı zamanlama sonuçları vardır. Normalde, tek yönlü bir aramanın kullanılması arayanın programlanmaya devam etmesine neden olurken, normal bir senkronize aramanın kullanılması, zamanlayıcının arayan kişiden aranan kişi sürecine anında aktarılmasına neden olur. Bu, ciltleyicide bir performans optimizasyonudur. Hedef süreçte tek yönlü çağrının yüksek öncelikli olarak yürütülmesi gereken hizmetler için, alıcı hizmetin zamanlama politikası değiştirilebilir. C++'da, libhidltransport setMinSchedulerPolicy yönteminin sched.h tanımlanan zamanlayıcı öncelikleri ve ilkeleriyle kullanılması, hizmete yapılan tüm çağrıların en azından ayarlanan zamanlama ilkesi ve önceliğinde çalışmasını sağlar.