از 27 مارس 2025، توصیه می کنیم از android-latest-release به جای aosp-main برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
وارونگی اولویت وضعیتی است که در آن یک تراکنش با اولویت بالا توسط یک کار با اولویت پایین به تأخیر می افتد زیرا وظیفه با اولویت پایین منبع مورد نیاز برای کار با اولویت بالا را در خود نگه می دارد. برای کاهش وارونگی اولویت، اندروید از اجرای رشتهها در اولویتهای مختلف از طریق سه شکل مختلف وراثت اولویت پشتیبانی میکند: وراثت اولویت تراکنش، وراثت اولویت گره، و ارث بری اولویت بلادرنگ.
این صفحه این اشکال مختلف ارث بری اولویت را توضیح می دهد.
وراثت اولویت معامله
هنگام برقراری تماس بایندر همزمان، یک رشته با اولویت بالا می تواند توسط یک رشته با اولویت پایین مسدود شود تا زمانی که رشته با اولویت پایین پاسخی را ارسال کند. به عنوان مثال، یک رشته با مقدار خوب 19- می تواند توسط یک رشته با مقدار خوب پیش فرض 0 مسدود شود.
وراثت اولویت تراکنش این مشکل را برطرف می کند زیرا راننده بایندر به طور موقت اولویت رشته بایندر را که تراکنش را مدیریت می کند تغییر می دهد تا با اولویت تماس گیرنده مطابقت داشته باشد. هنگامی که تراکنش انجام شد، درایور بایندر اولویت رشته بایندر را به مقدار قبلی آن باز می گرداند.
وراثت اولویت گره
در برخی شرایط، مانند مواردی که نیاز به تأخیر کم دارند، اولویت تراکنش های ناهمزمان اهمیت دارد.
وراثت اولویت گره به شما امکان می دهد حداقل اولویتی را که تمام تراکنش های یک گره باید در آن اجرا شوند، پیکربندی کنید. پس از پیکربندی وراثت اولویت گره، تمام تراکنش های روی گره با این اولویت حداقل اجرا می شوند.
قوانین وراثت اولویت گره عبارتند از:
اگر تراکنش همزمان باشد، اولویت به max(min_node_priority, caller_priority); .
اگر تراکنش ناهمزمان باشد، اولویت به max(default_priority (nice 0), min_node_priority); .
وراثت اولویت گره را پیکربندی کنید
برای پیکربندی وراثت اولویت گره، از BBinder::setMinSchedulerPolicy استفاده کنید.
ارث بری با اولویت بلادرنگ
Android از خطمشیهای زمانبندی همزمان، مانند SCHED_FIFO ، استفاده میکند تا باعث شود رشتههای مهم تأخیر کار خود را به موقع کامل کنند. علاوه بر این، برخی از کارهای حیاتی تأخیر اندروید بر دو یا چند فرآیند تقسیم میشوند.
وراثت اولویت بلادرنگ مانند مقادیر خوب عمل می کند، به جز:
وراثت اولویت بلادرنگ به طور پیش فرض غیرفعال است.
مقادیر اولویت زمان واقعی بیشتر اولویت بیشتری نسبت به مقادیر کوچکتر دارند.
وراثت با اولویت بلادرنگ را فعال کنید
وراثت اولویت بلادرنگ باید برای گره های جداگانه با استفاده از فراخوانی BBinder::setInheritRt(true) فعال شود.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-30 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-30 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Priority inheritance\n\n*Priority inversion* is a situation where a high-priority transaction is\ndelayed by a low-priority task because the low-priority task holds a\nresource needed by the high-priority task. To mitigate priority inversion,\nAndroid supports running threads at different priorities through\nthree different forms of priority inheritance: transaction\npriority inheritance, node priority inheritance, and real-time priority\ninheritance.\n\nThis page explains these different forms of priority inheritance.\n\nTransaction priority inheritance\n--------------------------------\n\nWhen making a synchronous binder call, a high-priority thread can be blocked\nby a low-priority thread until the low-priority thread has sent a reply. For\nexample, a thread with a nice value of -19 can become blocked by a thread with a\ndefault nice value of 0.\n\n*Transaction priority inheritance* fixes this issue because the binder driver\ntemporarily changes the priority of the binder thread handling the transaction\nto match the priority of the caller. When the transaction is done, the binder\ndriver restores the priority of the binder thread to its previous value.\n| **Note:** In an asynchronous transaction, a binder thread doesn't inherit the priority from the caller because an asynchronous transaction doesn't block the caller. While it might be important for the caller to complete the asynchronous transaction as soon as possible, the actual handling of the transaction might not be latency critical, and it would be unnecessary to run the handling thread at a high-priority.\n\nNode priority inheritance\n-------------------------\n\nIn some situations, such as those that require low latency, the\npriority of asynchronous transactions matters.\n\n*Node priority inheritance* lets you configure the minimum priority that all\ntransactions on a node should run at. After node priority inheritance is\nconfigured, all transactions on the node run at this minimum priority.\n| **Note:** If the caller has a higher priority than the node for a synchronous transaction, transactions on the node might run at a higher priority than the node priority inheritance.\n\nThe rules for node priority inheritance are:\n\n- If the transaction is synchronous, the priority becomes\n `max(min_node_priority, caller_priority);`.\n\n- If the transaction is asynchronous, the priority becomes\n `max(default_priority (nice 0), min_node_priority);`.\n\n| **Note:** Real-time priority is always greater than any nice value with a non-real-time priority.\n\n### Configure node priority inheritance\n\nTo configure node priority inheritance, use `BBinder::setMinSchedulerPolicy`.\n\nReal-time priority inheritance\n------------------------------\n\nAndroid uses real-time scheduling policies, such as `SCHED_FIFO`, to cause\nlatency-critical threads to complete their work in time. Additionally, some of\nAndroid's latency-critical work is split over two or more processes.\n\n*Real-time priority inheritance* works identically to nice values, except:\n\n- Real-time priority inheritance is disabled by default.\n- Greater real-time priority values have higher priority than smaller values.\n\n### Enable real-time priority inheritance\n\nReal-time priority inheritance must be enabled for individual nodes\nusing the `BBinder::setInheritRt(true)` call."]]