Thread pool nima va nimaga kerak?
Assalamu Alaykum bugun thread pool haqida gaplashib o'tamiz .
Agenda
Threadpool Nima ?
U bizga nimaga kerak ?
Real hayotdagi ishlatilinishi ?
Prototype (code examples)
bilib olamiz.
Threadlar dasturning ishlash vaqtini yaxshilashning eng yaxshi usuli bo'lib buning uchun serverdagi bir necha corelarni bir vaqtda ishlatishga yordam beradi .Ammo juda ko’p threadlarni bir vaqtda ishga tushurish serverni juda yomon holatga olib kelishi mumkin Va bu holarda bizga thread pool yordamga keladi.
Muammo
Tassavur qiling bizada webserver bor , agarda bizga yangi so'rov kelsa biz shu so'rovni amalga oshirish uchun yangi thread yaratamiz.Bu holatda agar bizda n ta so'rov bo'lsa bir vaqtda bizda n ta thread bor degani .
Xo'sh bu yerda hamasi yaxshiku muammo nimada ?
Agarda so'rovlar soni ko'payib ketsachi ?
Bu bizda juda ko'p threadlar yaratilishiga olib keladi .Bunda har bir thread o'zining stack yani xotirasiga ega bo'lganligi uchun xotira juda ko’p sarflanishni boshlaydi .Va threadlar juda ko'pligi uchun operatsion sistema ular o'rtasida context switching qilishi zarur va bu juda ko'p resurs talab qilishni boshlaydi .Bularning natijasida server vaqtincha ishdan chiqishi yoki batamom qulashi mumkin.
Buni oddiy yo'l bilan tushunishga harakat qilamiz. Siz bozordasiz va bir nechta narsalar sotib olishingiz zarur ularning oldingiz ammo shu payt akangiz telefon qilib yana qo'shimcha narsalar olish kerakligini aytdi .Va sizdagi mahsulotlar ko'payib ketdi bu holatda ularni hammasini birgalikda ko'tara olsangiz lekin oldingiday tez uyga yetib borolmaysiz agarda ko'tarolmasangiz bo'lib olib borishingiz kerak bu juda ko'p vaqt talab qiladi .Yoki taxi xizmatidan ko'proq yukni etish uchun foydalanishingiz kerak bu qimmatga tushadi . Xuddi shu jarayonda siz o'zingizni server mahsulotlani threadlar akangiz aytgan mahsulotlar yangi qo'shimcha threadlar .Mahsulotni bir vaqtda ko'tara olmasligingiz server qulashi taxi xizmati esa serverning qimmatrog'iga almashtirish deb tushunsangiz bo'ladi.
Har bir kelgan so'rovga yangi thread ochish bu juda sodda yo'l va natijalarini ko'rdik .Shuning uchun biz eng ko'pida qancha thread yaratishimiz mumkinligini uchun cheklov qo'yishimiz zarur. Xuddi shu yerda bizga threadpool kerak bo'ladi.
Thread pool Nima ?
Thread pool— bu bir necha ishchi threadlar to'plami bo'lib , berilgan vazifalarni parallel ishga tushurishga (lekin cheklangan) yordam beradi.
Real hayotda misol
Message broker dan olingan vazifalarni bajarish bu yerda threadpool sizga serverni qulatmagan holda uning to'liq resurslaridan foydalanishga yordam beradi.
Bizga yangi vazifa kelganda biz yangi thread yaratmasdan threadpooldagi bir threadni olib shu vazifani unga yuklaymiz va vazifa yakunlangandan so'ng ushbu threadni qayta thread poolga qo'shib qo'yamiz.
Bu holatlarda biz har doim yangi thread yaratish uchun ketadigan vaqtdan yutishga yordam beradi .Va bu bizga stable performance beradi .
Chunki sizdagi threadlar soni cheklangan va undan ortmaydi ammo buning yomon tomoni qachonki serverga yang so'rov kelganda agar threadpool bo'sh bo'lsa u qaysidir vazifa yakunlangancha kutib turadi . Buning yordamida hardware ko'p yuklama tushishidan saqlanadi .
Threadpool o'lchami qancha bo'lishi kerak ?
Buni aniq topish judayam qiyin.
Agarda u juda kichik bo'lsa
Hardware to'liq ishlatilinmaydi
Tasklar ko'p kutib qoladi
Agarda u juda katta bo'lsa hardware ko'tara olmaydi .
Bizda thread pooling o'lchamini topishning aniq qoidalari yoq bu odatda dasturning o'ziga bog'liq bo'ladi .Ammo thread pool o'lchamini aniqlashda hisobga olish kerak bo'lgan bir necha sabablar bor .
Thread pool CPUga bog'liq tasklar uchun ham, I/O-bound tasklar uchun ham foydali — faqat ulardagi polol o'lchami farq qiladi: CPUga bog'liq uchun ≈ yadrolar soniga (teng) , I/O-bound uchun yadrolardan ko'proq.(chunki threadlar kutib turadi) "
nechta processor borligi
2.beriladigan task xarakteristikasi
Masalan ko'p CPU yeydigan yoki ko'p xotira talab qiladigan tasklar server holatiga qarab har xil sondagi threadlar yaratiladi.
Kodda
https://github.com/HabibovUlugbek/Ozbekcha-resurslar/tree/main/threadpool
Tepadagi repostoryda GO va Nodejsda kod misollari berilgan .

Xulosa
Xulosa qilib aytadigan bo'lsa thread pool bizga serverni qulatmagan holda iloji boricha uning ko'proq qismidan foydalanishga yordam beradi.
E’tiboringiz uchun rahmat !! Xato va kamchiliklar uchun oldindan uzr !!