ovozsizually sobiqyopiq kirish - o'zaro eksklyuziv foydalanish) - umumiy manbaga parallel ravishda kirish taqiqlanadi. Barcha kerakli harakatlar amalga oshirilgandan so'ng, mutex ozod qilinadi va boshqa manbalarga umumiy manbaga kirish huquqini beradi. Ob'ekt bir xil ip bilan ikkinchi marta rekursiv suratga olishni qo'llab-quvvatlaydi, hisoblagichni ipni bloklamasdan kattalashtiradi va keyin bir nechta ajratishni talab qiladi. Bu, masalan, Win32-dagi tanqidiy bo'lim. Biroq, ba'zi bir amaliyotlar mavjud, buni qo'llab-quvvatlamaydi va rekursiv suratga olishga urinishda ipni qulflashga olib keladi. Bu Windows yadrosidagi FAST_MUTEX.
· Semaforalar resurslar manbai bo'sh bo'lmaguncha, bir vaqtning o'zida bir nechta mavzular bo'yicha olinishi mumkin bo'lgan mavjud manbalarni anglatadi. Keyin qo'shimcha oqimlar kerakli miqdordagi manbalar yana mavjud bo'lguncha kutish kerak. Semaforlar juda samarali, chunki ular bir vaqtning o'zida manbalarga kirishga imkon beradi. Semafora - bu muteksning mantiqiy davomidir - 1 hisoblagichi bo'lgan semafora muteksga teng, ammo hisoblagich 1 dan ortiq bo'lishi mumkin.
Hodisalar. "Signature" yoki "signalizatsiya", "signalizatsiya qilinmagan holatga qaytarish" va "kutish" operatsiyalari aniqlangan 1 bit ma'lumotni saqlaydigan ob'ekt. Belgilangan hodisani kutish - bu ipni darhol davom ettirish bilan operatsiyaning yo'qligi. Belgilanmagan hodisani kutish, boshqa bir ip (yoki OT yadrosidagi uzilishni boshqarish vositasining ikkinchi bosqichi) voqea to'g'risida signal bermaguncha, ipning to'xtatilishiga olib keladi. "Har qanday" yoki "hamma" rejimida bir nechta hodisalarni kutish mumkin. Birinchi va faqat kutish ipi uyg'onganidan keyin signalizatsiya qilinmagan holatga avtomatik ravishda tiklanadigan hodisani yaratish mumkin (bunday ob'ekt "tanqidiy bo'lim" ob'ektini amalga oshirish uchun asos sifatida ishlatiladi). Ular MS Windows-da, foydalanuvchi rejimida ham, yadro rejimida ham faol qo'llaniladi. Linux yadrosida kwait_queue deb nomlangan shunga o'xshash ob'ekt mavjud.
· Kritik bo'limlar mutexeslarga o'xshash sinxronizatsiyani ta'minlaydi, bundan tashqari tanqidiy bo'limlarni ifodalovchi ob'ektlar bir xil jarayonda mavjud bo'lishi mumkin. Hodisalar, mutexesalar va semaforalarni bitta jarayonli dasturlarda ham ishlatish mumkin, ammo ba'zi bir operatsion tizimlarda (masalan, Windows NT) tanqidiy qismni amalga oshirish o'zaro tezkor va samaraliroq o'zaro eksklyuziv sinxronizatsiya mexanizmini ta'minlaydi - tanqidiy qismda olish va chiqarish operatsiyalari optimallashtirilgan. OT yadrosiga olib keladigan har qanday tizim qo'ng'iroqlarini oldini olish uchun bitta ipning holati (raqobat yo'q). Mutekslar singari, tanqidiy bo'limni ifodalovchi ob'ekt bir vaqtning o'zida faqat bitta ipdan foydalanishi mumkin, bu esa ularni umumiy manbalarga kirishni cheklash uchun juda foydali qiladi.
Shartli o'zgaruvchilar (kondrlar). Ular voqealarga o'xshash, ammo ular xotirani egallaydigan ob'ektlar emas - faqat o'zgaruvchining manzili ishlatiladi, "o'zgaruvchining mazmuni" tushunchasi mavjud emas, ixtiyoriy ob'ektning manzili shartli o'zgaruvchi sifatida ishlatilishi mumkin. Hodisalardan farqli o'laroq, agar o'zgaruvchini kutayotgan mavzular bo'lmasa, o'zgaruvchi holatni signalizatsiya holatiga o'rnatish hech qanday oqibatlarga olib kelmaydi. Hodisani shunga o'xshash holatda o'rnatish "signal" holatini voqeaning o'zida saqlashni anglatadi, shundan so'ng voqeani kutishni istagan keyingi mavzular to'xtamasdan darhol ijro etishni davom ettiradi. Bunday ob'ektdan to'liq foydalanish uchun "muteksni bo'shating va shartli o'zgaruvchini atomik ravishda kuting" operatsiyasi ham talab qilinadi. Ular UNIX-ga o'xshash operatsion tizimlarda keng qo'llaniladi. Voqealar va shartli o'zgaruvchilarning afzalliklari va kamchiliklari haqida munozaralar Windows va UNIX-ning afzalliklari va kamchiliklari haqidagi munozaralarning muhim qismidir.
IO tugatish porti (IOCP). OT yadrosida amalga oshirilgan va tizim chaqiruvlari orqali "tuzilmani quyruqning quyrug'iga qo'yish" va "navbatning boshidan keyingi tuzilmani olish" operatsiyalari bilan amalga oshiriladigan "quyruq" ob'ekti, agar ob'ekt bo'sh bo'lsa, ipning bajarilishini to'xtatib turadi. boshqa joy "joyga" qo'ng'iroq qilmaydi. IOCP-ning eng muhim xususiyati shundaki, tarkibiy tuzilmalarni nafaqat foydalanuvchi rejimidan aniq tizimli qo'ng'iroq orqali, balki fayl tavsiflovchilardan birida bajarilgan asinxron kirish / o'chirish operatsiyasi natijasida OT yadrosi ichiga joylashtirilishi mumkin. Ushbu ta'sirga erishish uchun "IOCP-ga fayllar tavsifini bog'lang" tizim qo'ng'irog'idan foydalanishingiz kerak. Bunday holda, navbatga qo'yilgan struktura I / O operatsiyasining xato kodini o'z ichiga oladi va agar ushbu operatsiya muvaffaqiyatli bo'lsa, kirish yoki chiqish baytlarining soni. Tugatish portining bajarilishi struktura navbatga qo'yilgandan so'ng bitta protsessor / yadroda ishlaydigan iplar sonini cheklaydi. Ob'ekt MS Windows-ga xos bo'lib, kirish ulanish so'rovlari va server dasturiy ta'minotida ma'lumotlar uzatmalarini arxitekturada qayta ishlashga imkon beradi, bu erda oqimlar soni mijozlar sonidan kam bo'lishi mumkin (har bir yangi mijoz uchun alohida iste'mol manbai bo'lgan alohida ipni yaratish shart emas).
· ERESOURCE. Birgalikda yoki eksklyuziv yozish semantikasiga ega bo'lgan rekursiv yozishni qo'llab-quvvatlaydigan muteks. Semantika: ob'ekt erkin bo'lishi mumkin, yoki ixtiyoriy sonda bitta ip bilan umumiy shaklda yozilgan yoki eksklyuziv ravishda faqat bitta ip tomonidan yozib olinishi mumkin. Ushbu qoidani buzadigan har qanday suratga olish urinishlari ob'ekti bo'shatilguncha ipni to'sib qo'yadi, shunda ushlashga ruxsat beriladi. TryToAcquire kabi operatsiyalar ham mavjud - u hech qachon ipni to'sib qo'ymaydi yoki ushlamaydi yoki (agar qulf kerak bo'lsa) FALSE ni hech narsa qilmasdan qaytaradi. Windows yadrosida, ayniqsa fayl tizimlarida ishlatiladi - masalan, har qanday ochiq diskdagi fayl FCB tuzilishiga mos keladi, unda fayl o'lchamiga kirishni sinxronlashtirish uchun 2 ta shunday ob'ekt mavjud. Ulardan biri - paing IO manzili - faqat faylni qisish yo'lida ushlab turiladi va kesish vaqtida keshda va faylni xotirada xaritada faol I / O yo'qligini ta'minlaydi.
Rundown himoyasi. Windows yadrosidagi yarim hujjatli (qo'ng'iroqlar sarlavha fayllarida mavjud, ammo hujjatlarda emas) ob'ekt. "Ko'tarish", "pasayish" va "kutish" operatsiyalari hisoblagichi. Kesish operatsiyalari hisoblagichni nolga tushirmaguncha kutish ipni to'sib qo'yadi. Bundan tashqari, o'sish jarayoni muvaffaqiyatsiz bo'lishi mumkin va faol kutish vaqtining mavjudligi barcha o'sish operatsiyalarining muvaffaqiyatsiz bo'lishiga olib keladi.
Oddiy ko'p tishli dasturni qurishga misol.
Delphi-da ko'p qirrali dasturlarni qurish bilan bog'liq ko'plab savollar sabab tug'ilgan.
Ushbu misolning maqsadi, uzoq muddatli ishlarni alohida ipda olib tashlash bilan, ko'p tishli dasturni qanday qilib to'g'ri qurish kerakligini namoyish etish. Va qanday qilib bunday dasturda asosiy ipning ishchi bilan ma'lumotni shakldan (vizual komponentlar) oqimga va orqaga uzatish uchun ishlashini ta'minlash.
Misol to'liq emas deb da'vo qilmaydi, bu faqat iplar orasidagi o'zaro ta'sirning eng oddiy usullarini namoyish etadi. To'g'ri ishlaydigan ko'p qirrali dasturni foydalanuvchiga "tezda ko'r" bo'lishiga imkon berish (kimdan nafratlanishimni kim biladi).
Undagi hamma narsa (mening fikrimcha) batafsil sharhlangan, ammo agar sizda biron bir savol bo'lsa, so'rang.
Ammo yana bir bor ogohlantiraman: Oqim oson emas... Agar siz hammasi qanday ishlashini bilmasangiz, unda katta xavf mavjud, ko'pincha siz uchun hamma narsa yaxshi ishlaydi va ba'zida dastur juda g'alati ko'rinishga ega bo'ladi. Noto'g'ri yozilgan ko'p qatorli dasturning ishlashi ba'zida disk raskadrovka paytida ko'paytirib bo'lmaydigan ko'plab omillarga bog'liq.
Do'stlaringiz bilan baham: |