অগ্রাধিকার উত্তরাধিকার

অগ্রাধিকার বিপর্যয় হল এমন একটি পরিস্থিতি যেখানে একটি উচ্চ-অগ্রাধিকার লেনদেন একটি নিম্ন-অগ্রাধিকার কাজ দ্বারা বিলম্বিত হয় কারণ নিম্ন-অগ্রাধিকারের কাজটি উচ্চ-অগ্রাধিকারমূলক কাজের জন্য প্রয়োজনীয় একটি সংস্থান রাখে। অগ্রাধিকার ইনভার্সন কমাতে, অ্যান্ড্রয়েড অগ্রাধিকার উত্তরাধিকারের তিনটি ভিন্ন ফর্মের মাধ্যমে বিভিন্ন অগ্রাধিকারে চলমান থ্রেড সমর্থন করে: লেনদেনের অগ্রাধিকার উত্তরাধিকার, নোড অগ্রাধিকার উত্তরাধিকার এবং রিয়েল-টাইম অগ্রাধিকার উত্তরাধিকার।

এই পৃষ্ঠাটি অগ্রাধিকার উত্তরাধিকারের এই বিভিন্ন রূপ ব্যাখ্যা করে।

লেনদেন অগ্রাধিকার উত্তরাধিকার

একটি সিঙ্ক্রোনাস বাইন্ডার কল করার সময়, একটি উচ্চ-অগ্রাধিকার থ্রেড একটি নিম্ন-অগ্রাধিকার থ্রেড দ্বারা ব্লক করা যেতে পারে যতক্ষণ না নিম্ন-অগ্রাধিকার থ্রেড একটি উত্তর না পাঠায়। উদাহরণস্বরূপ, -19 এর একটি সুন্দর মান সহ একটি থ্রেড 0 এর ডিফল্ট সুন্দর মান সহ একটি থ্রেড দ্বারা ব্লক করা যেতে পারে।

লেনদেনের অগ্রাধিকার উত্তরাধিকার এই সমস্যার সমাধান করে কারণ বাইন্ডার ড্রাইভার সাময়িকভাবে লেনদেন পরিচালনাকারী বাইন্ডার থ্রেডের অগ্রাধিকার পরিবর্তন করে কলারের অগ্রাধিকারের সাথে মেলে। যখন লেনদেন সম্পন্ন হয়, তখন বাইন্ডার ড্রাইভার বাইন্ডার থ্রেডের অগ্রাধিকারকে তার আগের মানটিতে পুনরুদ্ধার করে।

নোড অগ্রাধিকার উত্তরাধিকার

কিছু পরিস্থিতিতে, যেমন কম লেটেন্সি প্রয়োজন, অ্যাসিঙ্ক্রোনাস লেনদেনের অগ্রাধিকার গুরুত্বপূর্ণ।

নোডের অগ্রাধিকার উত্তরাধিকার আপনাকে ন্যূনতম অগ্রাধিকারটি কনফিগার করতে দেয় যা একটি নোডে সমস্ত লেনদেন চালানো উচিত। নোড অগ্রাধিকার উত্তরাধিকার কনফিগার করার পরে, নোডের সমস্ত লেনদেন এই ন্যূনতম অগ্রাধিকারে চলে।

নোড অগ্রাধিকার উত্তরাধিকারের নিয়ম হল:

  • লেনদেনটি সিঙ্ক্রোনাস হলে, অগ্রাধিকার max(min_node_priority, caller_priority); .

  • যদি লেনদেনটি অ্যাসিঙ্ক্রোনাস হয়, তাহলে অগ্রাধিকার max(default_priority (nice 0), min_node_priority); .

নোড অগ্রাধিকার উত্তরাধিকার কনফিগার করুন

নোড অগ্রাধিকার উত্তরাধিকার কনফিগার করতে, BBinder::setMinSchedulerPolicy ব্যবহার করুন।

রিয়েল-টাইম অগ্রাধিকার উত্তরাধিকার

অ্যান্ড্রয়েড রিয়েল-টাইম শিডিউলিং নীতিগুলি ব্যবহার করে, যেমন SCHED_FIFO , লেটেন্সি-সমালোচনামূলক থ্রেডগুলিকে সময়মতো তাদের কাজ শেষ করতে৷ উপরন্তু, অ্যান্ড্রয়েডের কিছু লেটেন্সি-সমালোচনামূলক কাজ দুই বা ততোধিক প্রক্রিয়ায় বিভক্ত।

রিয়েল-টাইম অগ্রাধিকার উত্তরাধিকার সুন্দর মানগুলির সাথে অভিন্নভাবে কাজ করে, বাদে:

  • রিয়েল-টাইম অগ্রাধিকার উত্তরাধিকার ডিফল্টরূপে অক্ষম করা হয়।
  • বৃহত্তর রিয়েল-টাইম অগ্রাধিকার মানগুলি ছোট মানের চেয়ে বেশি অগ্রাধিকার পায়৷

রিয়েল-টাইম অগ্রাধিকার উত্তরাধিকার সক্ষম করুন৷

BBinder::setInheritRt(true) কল ব্যবহার করে পৃথক নোডের জন্য রিয়েল-টাইম অগ্রাধিকার উত্তরাধিকার সক্রিয় করা আবশ্যক।