Thread Scheduler — bajarishga tayyor threadlar orasidan qaysi biri qachon va qaysi protsessorda ishlashini tanlaydigan operatsion tizim yoki runtime komponenti.
Rejalashtirish sikli
Preemptive scheduler timer interrupt, blocking, wakeup yoki priority hodisasida qaror qiladi. Running thread contexti saqlanib, keyingi thread register va stack holati tiklanadi. Run queue per-CPU yoki global bo‘lishi mumkin.
Adolat va ustuvorlik
Fair scheduler CPU vaqtini weight yoki virtual runtime bilan taqsimlaydi. Priority scheduler muhim threadni oldin tanlaydi; starvationni aging yoki bandwidth limit cheklaydi. Interactive workload latency, batch workload throughputni ustun qo‘yadi.
Ko‘p yadro
Multicore tizim load balancing threadlarni CPUlar orasida ko‘chiradi. Migration cache va NUMA localityni yo‘qotishi mumkin. Affinity hard restriction yoki yumshoq preference sifatida qo‘llanadi.
Bloklanish
Blocking I/O threadni waiting holatiga o‘tkazadi, event kelganda wakeup ready queue’ga qaytaradi. Lost wakeupni wait queue lock va condition protokoli oldini oladi. Spurious wakeup bo‘lsa condition loopda qayta tekshiriladi.
Priority inversion
Priority inversionda yuqori priority thread past priority lockini kutadi, o‘rtacha priority esa past threadni ishlatmaydi. Priority inheritance lock egasini vaqtincha ko‘taradi. Real-time scheduler uchun bounded latency muhim.
O‘lchash
Tekshiruv CPU utilization, run-queue latency, context switch, migration va fairnessni o‘lchaydi. Race-sensitive test faqat wall-clock timeoutga tayanmay, scheduler trace va invariantlardan foydalanadi.
Amaliy boshqaruv
Thread Scheduler implementatsiyasida run queue va context switch alohida va versiyalangan holat sifatida yuritiladi. Qaror uchun zarur inputlar yashirin global taxminga aylantirilmaydi: platforma, konfiguratsiya, identity yoki memory-order sharti tegishli obyekt bilan bog‘lanadi. Shu sabab incremental yangilanish, context almashishi yoki parallel hodisada eskirgan ma’lumotdan foydalanish kamayadi. Debug rejim qarorni hosil qilgan edge, state transition va parametrlarni ko‘rsatadi; production log esa maxfiy qiymatlarni xom shaklda yozmaydi.
Muhim xato sinfi — starvation, priority inversion yoki ortiqcha migration. Bunday vaziyatda tizim optimistik tarzda davom etmaydi: semantikaga qarab konservativ fallback, bounded retry, taskni bloklash yoki aniq error tanlanadi. Timeout correctness isboti emas; u faqat operatsion limitdir. Queue membership, reference count, lock ownership va visibility kabi invariantlar state bilan atomik yangilanadi. Cancellation yoki failure o‘rtada yuz bersa qisman o‘zgargan holat cleanup protokoli orqali tiklanadi.
Sifat nazorati fairness, latency va scheduler trace orqali bajariladi. Test normal yo‘ldan tashqari bo‘sh navbat, bitta element, yuqori contention, timeout bilan bir vaqtdagi wakeup, resurs limiti va platforma variantlarini qamraydi. To‘g‘rilik performance’dan alohida tekshiriladi; keyin throughput, p99 latency, context switch, cache miss yoki artefakt hajmi kabi mavzuga mos ko‘rsatkichlar baseline bilan solishtiriladi. Topilgan minimal interleaving yoki kirish regressiya to‘plamida doimiy saqlanadi.
Scheduler trace wakeupdan runninggacha bo‘lgan kechikishni, preemption sababini va CPU migrationni ko‘rsatadi. Utilization yuqori bo‘lmasa ham bitta uzun non-preemptible section p99 latencyni buzishi mumkin. Frequency scaling va SMT sibling contention benchmark natijasida alohida qayd etiladi.
Bog‘liq tushunchalar
scheduling, thread, context switch, run queue, priority, CPU affinity