Thread pool — vazifalarni bajarish uchun oldindan yaratilgan yoki boshqariladigan ishchi oqimlar to‘plamidir. Har bir yangi vazifa uchun yangi oqim yaratish o‘rniga, vazifa navbatga qo‘yiladi va bo‘sh ishchi uni oladi. Bu oqim yaratish xarajatini kamaytiradi, parallelizmni cheklaydi va tizim resurslarini boshqarishni osonlashtiradi.
Asosiy tuzilma
Pool odatda vazifalar navbati, ishchi oqimlar, qabul qilish siyosati va yakunlash mexanizmidan iborat. Ishchi navbatdan vazifa oladi, bajaradi va keyingi vazifani kutadi. Pool o‘lchami doimiy bo‘lishi yoki yukga qarab minimal va maksimal chegaralar orasida o‘zgarishi mumkin.
Cheklanmagan navbat vaqtinchalik yukni yutadi, lekin ishlab chiqarish tezligi kelish tezligidan past bo‘lsa, xotira sarfi va kechikish uzluksiz oshadi. Chegaralangan navbat to‘lganda tizim vazifani rad etishi, jo‘natuvchini kutdirishi yoki vazifani jo‘natuvchi oqimda bajarishi mumkin. Bu backpressure siyosati xizmatning ortiqcha yuk ostidagi xatti-harakatini belgilaydi.
Pool o‘lchamini tanlash
CPUga bog‘liq vazifalar uchun ishchilar soni ko‘pincha mavjud protsessor yadrolari soniga yaqin tanlanadi. Juda ko‘p oqim context switch va kesh raqobatini oshiradi. I/Oga bog‘liq vazifalar vaqtning katta qismini kutishda o‘tkazgani uchun ko‘proq ishchi foydali bo‘lishi mumkin. Biroq ma’lumotlar bazasi ulanishlari, masofaviy xizmat limitlari va xotira ham cheklov hisoblanadi.
Bitta poolga uzoq va qisqa vazifalarni aralashtirish qisqa ishlarning navbatda qolishiga olib keladi. Ustuvorlikka ega navbat muhim ishlarni oldinga chiqaradi, lekin past ustuvor vazifalarni och qoldirishi mumkin. Turli resurs profiliga ega ishlar uchun alohida poollar ko‘pincha aniqroq izolyatsiya beradi.
Xavfli holatlar
Pool ishchisi o‘sha poolga yangi vazifa yuborib, uning natijasini sinxron kutsa, barcha ishchilar kutish bilan band bo‘lib deadlock yuz berishi mumkin. Qulfni ushlab turib bloklovchi I/O bajarish ham throughputni pasaytiradi. Vazifadagi ushlanmagan istisno ishchini yo‘qotmasligi yoki butun jarayonni to‘xtatmasligi uchun bajaruvchi qatlam xatoni qayd etib, siyosat asosida ishlov beradi.
Bekor qilish faqat navbatdan vazifani olib tashlash bilan cheklanmaydi. Bajarilayotgan kod bekor qilish belgisi yoki muddatni tekshirishi, resurslarni finally kabi kafolatlangan yo‘l bilan bo‘shatishi kerak. Jarayon yopilishida yangi vazifalar qabul qilinmaydi, navbatdagi ishlarni tugatish uchun muddat beriladi va undan keyin majburiy to‘xtatish siyosati qo‘llanadi.
Kuzatuv
Navbat uzunligi, kutish va bajarish vaqti, faol ishchilar, rad etilgan vazifalar va xatolar asosiy ko‘rsatkichlardir. Faqat CPU bandligiga qarash yetarli emas: tashqi xizmat sekinlashsa, ishchilar bloklanib, CPU bo‘sh turgan holda navbat o‘sishi mumkin. Vazifa turi bo‘yicha metrikalar qaysi ish yukni egallayotganini ko‘rsatadi.
Thread pool asinxron dasturlash bilan zid tushuncha emas. Ko‘plab runtimelar bloklovchi yoki CPU talab qiluvchi ishlarni fon poolida bajaradi, hodisa sikli esa tayyor natijalarni boshqaradi. Pool konfiguratsiyasi yashirin bo‘lsa ham, uning navbati va chegaralari tizim kechikishiga bevosita ta’sir qiladi.
Kontekstni uzatish
Vazifa boshqa oqimda bajarilganda so‘rov identifikatori, tracing konteksti, til sozlamasi yoki xavfsizlik konteksti avtomatik ko‘chmasligi mumkin. Pool kutubxonasi buni qo‘llamasa, kerakli qiymatlar vazifa bilan aniq uzatiladi va ish tugagach tozalanadi. Aks holda qayta ishlatilgan oqimda oldingi foydalanuvchining konteksti keyingi vazifaga sizib o‘tishi mumkin. Maxfiy qiymatlar oqim-lokal xotirada qolmasligi uchun tozalash istisno yuz berganda ham bajariladi.
Bog‘liq tushunchalar
Oqim, Vazifalar navbati, Backpressure, Context switch, Deadlock, Asinxron dasturlash