Öncelikli devralma

Öncelik tersine çevirme, yüksek öncelikli bir işlemin düşük öncelikli bir görev tarafından geciktirildiği bir durumdur. Bunun nedeni, düşük öncelikli görevin yüksek öncelikli görev için gereken bir kaynağı tutmasıdır. Android, öncelik ters çevrilmesini azaltmak için üç farklı öncelik devralma biçimi (işlem önceliği devralma, düğüm önceliği devralma ve gerçek zamanlı öncelik devralma) aracılığıyla iş parçacıklarının farklı önceliklerde çalıştırılmasını destekler.

Bu sayfada, öncelik devralmanın farklı biçimleri açıklanmaktadır.

İşlem önceliği devralma

Senkron bağlayıcı çağrısı yaparken, düşük öncelikli ileti dizisi yanıt gönderene kadar yüksek öncelikli ileti dizisi düşük öncelikli ileti dizisi tarafından engellenebilir. Örneğin, -19 nice değerine sahip bir iş parçacığı, 0 varsayılan nice değerine sahip bir iş parçacığı tarafından engellenebilir.

İşlem önceliği devralma, bağlayıcı sürücüsü işlemi işleyen bağlayıcı iş parçacığının önceliğini geçici olarak arayanın önceliğiyle eşleşecek şekilde değiştirdiğinden bu sorunu düzeltir. İşlem tamamlandığında bağlayıcı sürücü, bağlayıcı iş parçacığının önceliğini önceki değerine geri yükler.

Düğüm önceliği devralma

Düşük gecikme süresi gerektiren durumlar gibi bazı durumlarda, asenkron işlemlerin önceliği önemlidir.

Düğüm önceliği devralma, bir düğümdeki tüm işlemlerin çalışması gereken minimum önceliği yapılandırmanıza olanak tanır. Düğüm önceliği devralma yapılandırıldıktan sonra düğümdeki tüm işlemler bu minimum öncelikte çalışır.

Düğüm önceliği devralmayla ilgili kurallar şunlardır:

  • İşlem senkron ise öncelik max(min_node_priority, caller_priority); olur.

  • İşlem eşzamansızsa öncelik max(default_priority (nice 0), min_node_priority); olur.

Düğüm önceliği devralmayı yapılandırma

Düğüm önceliği devralmayı yapılandırmak için BBinder::setMinSchedulerPolicy kullanın.

Gerçek zamanlı öncelik devralma

Android, gecikme açısından kritik olan iş parçacıklarının çalışmalarını zamanında tamamlamasını sağlamak için SCHED_FIFO gibi gerçek zamanlı planlama politikaları kullanır. Ayrıca, Android'in gecikme süresi açısından kritik olan bazı çalışmaları iki veya daha fazla işleme bölünür.

Gerçek zamanlı öncelik devralma, aşağıdaki istisnalar dışında, nice değerleriyle aynı şekilde çalışır:

  • Gerçek zamanlı öncelik devralma özelliği varsayılan olarak devre dışıdır.
  • Daha yüksek gerçek zamanlı öncelik değerleri, daha düşük değerlere göre daha yüksek önceliğe sahiptir.

Anlık öncelik devralmayı etkinleştirme

BBinder::setInheritRt(true) çağrısı kullanılarak tek tek düğümler için gerçek zamanlı öncelik devralma etkinleştirilmelidir.