Fanning maqsadi



Download 83,33 Kb.
bet5/6
Sana26.04.2022
Hajmi83,33 Kb.
#581886
1   2   3   4   5   6
Bog'liq
Parallel

Tavsiya qilamiz: Introduction to Django infrastructure

Deylik, dasturimiz qisqa vaqt ichida ko’p ishni bajarishi kerak. Mexanikada bir qoida bor: quvvat(ya’ni ishchi kuchi) qancha oshsa, ishni bajarishga ketadigan vaqt shuncha kamayadi. Masalan, ishni 1 ta ishchi 10 kunda tugatsa, 5 ta ishchi ikki kunda tugatadi.
Biz ham dasturimiz tezroq tugashi uchun ko’proq ishchi yollaymiz. Butun ishni bitta threadga yuklab qo’yish o’rniga bir nechta thread ochib, umumiy ishni ularga taqsimlab beramiz. Aynan mana shu narsa multithreading deyiladi. Oddiy matematika…
Bugungi mavzumiz multithreading bo’lmagani uchun bu haqida batafsil to’xtalmaymiz.
Dasturlash, umuman engineering sohasida biror usul yoki texnologiya ishlab chiqilsa, buning uchun albatta qandaydir sabab bo’ladi. O’sha yangi narsa qaysidir muammo(lar)ni hal qilishi kerak. Va yomon tarafi, o’sha yangi usulning o’zi ham boshqa, yangi muammolarni keltirib chiqaradi… Engineer sifatida vazifamiz ham muammolarga yechim topish. Multithreading orqali dastur bajarilishiga ko’p vaqt sarflash muammosiga qaysidir darajada yechim topdik. Xo’sh, bu yechim optimalmi? Asinxron bizga nega kerak?
Bu mavzuni tushuntirayotganimda ko’pincha bir xil misol keltiraman. Sababi, shu exampleda sabablar aniq ko’rinadi.
Tasavvur qiling, biz 100 ta URLga murojaat qilib ulardan ma’lumot olishimiz kerak. Deylik, har bitta URLdan ma’lumot olishga 1 soniya vaqt ketadi. Biz so’rov yuboramiz va 1 soniyadan keyin bizga javob keladi. Agar bitta thread ishlatsak, jarayon taxminan pastdagidek bo’ladi. javob kelishiga ketgan vaqtni o’xshatish uchun sleepdan foydalanamiz. Natijani to’liq ko’rish uchun taskni 100 marta emas, 5 marta bajaramiz:

5 ta taskni sinxron tarzda bajarish
Ko’rganingizdek, har safar faqat bitta kutish tugagandan keyingina keyingi qismga o’tayapmiz. Demak, blocking call bo’layapti. Umumiy natija esa 5 soniyadan ko’proq vaqt oldi. Tabiiyki 100 ta url uchun 100 soniyadan ko’proq vaqt ketadi(yana matematika).
Multithreading orqali bu vaqtni ancha kamaytirishimiz mumkin. Agar 10 ta threaddan foydalansak ular bir vaqtda 10 ta URL bilan ishlay oladi. Umumiy vaqt ham deyarli 10 marta kamaydi(matematika…). Umuman olganda, yaxshi natija.
Shu joyida Caleb Hattingh asynchronous executionni tushuntirgan misolni keltiraman:
Deylik, sizda kattagina restoran bor va shunga yarasha ish ham ko’p. Albatta, hamma ishga bir kishi ulgurolmaydi va shuning uchun siz o’nlab xizmatchilar oldingiz. Ixtiyoriy vaqt restoraniningizga kirganingizda shunga o’xshash vaziyatga duch kelasiz:
Bir ishchi ovqat uchun ko’kat to’g’rayapti, biri qozondagi ovqat pishishini kutib turibdi, yana biri barmen ichimlik berishini kutib turibdi, boshqasi mijozga menuni berib, buyurtma olishni kutib turibdi va h.k. Bir necha haftalik kuzatishdan so’ng shuni aniqladingizki, ishchilarning 90% dan ko’p vaqti kutish bilan o’tib ketayapti. Vaholanki, siz ularga bu vaqt uchun ham maosh to’laysiz. Bundan tashqari, xizmatchilar ko’pligidan ba’zida bir-biriga xalaqit berib qolishadi. Shunda ajoyib bir fikr kelib qoldi:
Modomiki, ular vaqtining katta qismini kutish bilan o’tkazayotgan ekan, butun restorandagi ishni kam sonli xizmatchilar bilan ham eplasa bo’lmasmikan?
Tavakkal qilib hamma xizmatchilarni ishdan bo’shatib, faqat 1 kishini qoldirdingiz.
U endi hamma ishni qiladi:
Ovqatni qozonga soladi va mijozga menuni beradi. Buyurtmani kutmasdan barmendan ichimliklarni oladi va egalariga yetkazadi. Keyin kelib boya menu bergan xo’randalardan buyurtmani oladi(agar tayyor bo’lsa) va shu orada ovqatdan ham xabar oladi. Qarabsizki, butun restoran ishlariga bir kishi ulgurayapti.

Asinxron dasturlash asosida ham xuddi shu g’oya yotadi — threadlar sonini oshirish o’rniga bitta threaddan effektivroq foydalanish. Thread bo’shmi? boshqa vazifa berish kerak.
Asinxron dasturlashda biz asosan ikki narsa — coroutine va event loopdan foydalanamiz. Coroutine bu bajarilishi kerak bo’lgan vazifa. Task deyishimiz ham mumkin. Event loop esa o’sha coroutinelarni aylanib chiqib, qaysi biri tayyor bo’lsa shunisini bajarib ketaveradigan thread.
Pythonda asinxron ishlash

Download 83,33 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish