GIL
Bu mavzu haqida anchadan beri yozish niyatim bor edi va bugun shu kun keldi.
Keling GILga kirishdan oldin bazi narsalarni ko'rib chiqsak.
Thread - Bu kompyuteringiz ichida ishlaydigan ishchi. Biror ishni qilish uchun siz thread yaratasiz va unga task berasiz. U esa bajaradi.
Thread yaxshikuya ammo tasavvur qiling ikkita ishchingiz bitta ishni qilishga talashib qolsa nima qilasiz?
Bu muammo bizga "race condition"ni keltirib chiqaradi. Jaydarichasiga aytganda "Poyga"ni keltirib chiqaradi. Well shu yerda yordamga "Lock" keladi.
Lock - xojatxonaga hamma istalgan vaqt kira olmasligi uchun qulf qo'yishadiyu. Python ham huddi shu ishni qiladi. Bir nechta threadlar share qilingan resursga bir vaqtda kira olmasligi uchun lock ishlatiladi.
Moshinani bir vaqtda 2ta odam haydashini istamasangiz kerak menimcha.
Biror share qilingan resursni olaylik misol uchun o'zgaruvchi. O'zgaruvchiga kirayotgan thread avval uni "lock"ini ya'ni kalitini so'raydi.
Agar "Lock" boshqa thread tomonidan olingan bo'lsa, u o'sha thread o'z ishini tugatishini kutib turadi. Va keyin tugatishi bilan u ham o'z ishini o'sha resurs ustida bajaradi.
Yaxshi bir muammodan qutildik ammo yana bir muammo bor. Agar ikkita thread ham bir-birini resursi uchun "lock"ni kutib qolsa nima bo'ladi?
Bu muammo Deadlock deyiladi va bu butun dasturni birgalikda ishlashini cheklab qo'yadi. Buni yechish uchun "lock"lardan foydalanishda ehtiyot bo'lishimiz va boshqa threadlar resurslarni o'z vaqtida ishlatish uchun bo'shatishiga ishonch hosil qilishimiz kerak.
Garbage collector - o'z nomi bilan aytib turibdiki "musor teruvchi". U kompyuteringiz xotirasidagi anchadan buyon ishlatilmayotgan ma'lumotlarni musor deb o'ylab yig'ib ketadi. Ya'ni o'sha musor ma'lumotlarni o'chiradi.
Ammo ba'zan u thread ishlatayotgan ma'lumotni tasodifan musor deb o'ylab olib ketishi mumkin. Buni oldini olish uchun thread ma'lumotdan foydalanayotgan vaqtda, garbage collector ishlamasligini taminlash kerak.
GIL - Global Interpreter Lock. Bu xuddi gaichi akalarga o'xshaydi. Ubu joyda tekshiruv bo'lganda moshinalarni bitta-bitta o'tqazganidek ular ham threadlarni bitta-bitta ishlashini taminlaydi.
Python dasturlash tilini xotira menejmenti thread-safe emasligi uchun ular tunu kun ishlashadi. Ya'ni birdan ikkita moshina kirib ketib qolsa avaria yuzaga keladi deyayabman.
Bu akalarni o'z ishini yaxshi bajarganidan har bir thread o'z navbatini kelishini kutadi.
Demak qisqacha shular edi. Postda xatolar bo'lishi mumkin, yordam uchun comment tayyor.
Foydali bo'lsa share qilib qo'ying.
@otabekswe
Post #243
731