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

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

এই পৃষ্ঠায় অগ্রাধিকার ইনহেরিটেন্সের বিভিন্ন ফর্ম ব্যাখ্যা করা হয়েছে।

ট্রানজ্যাকশন প্রায়োরিটি ইনহেরিটেন্স

সিনক্রোনাস বাইন্ডার কল করার সময়, কম অগ্রাধিকারযুক্ত থ্রেড উত্তর না পাঠানো পর্যন্ত কম অগ্রাধিকারযুক্ত থ্রেড বেশি অগ্রাধিকারযুক্ত থ্রেডকে ব্লক করতে পারে। যেমন, -১৯ নাইস ভ্যালু সহ থ্রেড, ডিফল্ট নাইস ভ্যালু ০ সহ থ্রেডের মাধ্যমে ব্লক হয়ে যেতে পারে।

ট্রানজ্যাকশন সংক্রান্ত অগ্রাধিকার ইনহেরিটেন্স এই সমস্যার সমাধান করে কারণ বাইন্ডার ড্রাইভার সাময়িকভাবে বাইন্ডার থ্রেড হ্যান্ডলিং ট্রানজ্যাকশনের অগ্রাধিকার পরিবর্তন করে যাতে কলারের অগ্রাধিকারের সাথে তা ম্যাচ করে। ট্রানজ্যাকশন সম্পূর্ণ হয়ে গেলে, বাইন্ডার ড্রাইভার বাইন্ডার থ্রেডের অগ্রাধিকার আগের মানে ফিরিয়ে আনে।

নোড অগ্রাধিকার ইনহেরিট করা

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

নোড অগ্রাধিকার ইনহেরিটেন্স আপনাকে ন্যূনতম অগ্রাধিকার কনফিগার করতে দেয় যা কোনও নোডের সমস্ত ট্রানজ্যাকশনকে রান করতে হবে। নোড প্রায়োরিটি ইনহেরিটেন্স কনফিগার করার পরে, নোডের সব ট্রানজ্যাকশন এই ন্যূনতম প্রায়োরিটিতে রান করে।

নোড প্রায়োরিটি ইনহেরিটেন্সের নিয়মগুলি হল:

  • ট্রানজ্যাকশন সিঙ্ক্রোনাস হলে, অগ্রাধিকার max(min_node_priority, caller_priority); হয়ে যায়।

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

নোড প্রায়োরিটি ইনহেরিটেন্স কনফিগার করুন

নোড প্রায়োরিটি ইনহেরিটেন্স কনফিগার করতে, BBinder::setMinSchedulerPolicy ব্যবহার করুন।

রিয়েল-টাইম প্রায়োরিটি ইনহেরিটেন্স

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

রিয়েল-টাইম প্রায়োরিটি ইনহেরিটেন্স নাইস ভ্যালুর মতোই কাজ করে, তবে:

  • রিয়েল-টাইম প্রায়রিটি ইনহেরিটেন্স ডিফল্ট হিসেবে বন্ধ করা থাকে।
  • রিয়েল-টাইম অগ্রাধিকারের বেশি ভ্যালু, কম ভ্যালুর চেয়ে বেশি অগ্রাধিকার পায়।

রিয়েল-টাইম প্রায়োরিটি ইনহেরিটেন্স চালু করুন

BBinder::setInheritRt(true) কল ব্যবহার করে স্বতন্ত্র নোডের জন্য রিয়েল-টাইম অগ্রাধিকার ইনহেরিটেন্স চালু করতে হবে।