tg-me.com/microfrontend_ir/348
Last Update:
ددلاک یا بن بست در سیستمهای همزمان: ریشه مشکل و راهکارهای پیشگیرانه
در طراحی و پیادهسازی سیستمهای کانکارنت یا مالتی ترد، یکی از خطراتی که میتواند عملکرد سیستم را مختل کند Deadlock است .وضعیتی که در آن چند واحد اجرایی مانند تر، پروسس یا گوروتین برای دسترسی به منابع مشترک، بهصورت دائمی منتظر یکدیگر میمانند و هیچکدام قادر به پیشروی نیستند.
تعریف دقیق Deadlock
طبق نظریه کافمن ددلاک زمانی رخ میدهد که این چهار شرط بهطور همزمان برقرار باشند
• منابع بهصورت انحصاری توسط یک واحد اجرایی نگهداری میشوند.
• یک واحد اجرایی منبعی را در اختیار دارد و منتظر منبع دیگری است.
• منابع نمیتوانند از یک واحد اجرایی گرفته شوند، مگر اینکه خودش آزاد کند.
• مجموعه ای از واحدهای اجرایی وجود دارد که هر کدام منتظر منبعی هستند که در اختیار دیگری است.
اگر حتی یکی از این چهار شرط شکسته شود، سیستم از deadlock در امان خواهد بود.
مثال ساده
فرض کنید ترد الف و ترد ب داریم:
الف ابتدا ریسورس اول را لاک میکند و سپس میخواهد ریسورس دوم را لاک کند.
همزمان ترد ب ریسورس دوم را لاک کرده و منتظر ریسورس اول است.
در این حالت، هیچکدام نمیتوانند ادامه دهند. به این وضعیت Deadlock میگوییم
راهکارهای جلوگیری از Deadlock
۱. ترتیب یکسان در دسترسی به منابع (Lock Ordering)
طراحی سیستم به گونهای که تمام واحدهای اجرایی منابع را به ترتیب مشخص و ثابتی قفل کنند. این روش ساده ولی بسیار مؤثر است و مانع از بروز شرایط Circular Wait میشود.
۲. استفاده از تایماوت یا تلاش محدود برای گرفتن قفل (Timed Locking / Try-Lock)
در بسیاری از کتابخانههای کانکارنسی ، امکان تلاش برای گرفتن قفل بهصورت غیرمسدودکننده یا با تایماوت وجود دارد. اگر قفل گرفته نشد، میتوان تصمیم گرفت که عقبنشینی کرده یا مسیر جایگزین طی شود.
۳. پیشگیری از شرط Hold and Wait
با طراحی مکانیزمهایی که یک واحد اجرایی فقط زمانی منابع را لاک کند که همهی منابع مورد نیازش همزمان در دسترس هستند. این روش پیادهسازی دشوارتری دارد ولی مؤثر است.
۴. کاهش دانهبندی لاکها (Lock Granularity)
کاهش تعداد منابع قفلشونده یا ترکیب آنها در یک قفل واحد در شرایطی میتواند طراحی را سادهتر کند و احتمال بروز Deadlock را کاهش دهد.
۵. استفاده از ابزارهای تحلیل کانکارنسی
ابزارهایی مانند race detectors، lock order analyzers یا ابزارهای مدلسازی formal میتوانند در تشخیص زودهنگام مسیرهای مستعد بنبست کمک کنند.
Deadlock نه تنها باعث توقف کامل بخشی از سیستم میشود، بلکه معمولاً بهسختی در محیط تست بازتولید میشود و کشف آن نیازمند تحلیل دقیق رفتار زمان اجراست. در نتیجه، طراحی صحیح از ابتدا، مستندسازی لاکها، و استفاده از الگوهای شناختهشدهی جلوگیری از بنبست، کلید مقابله با این مشکل هستند.
〰️〰️〰️〰️〰️〰️
© | @microfrontend_ir
BY Microfrontend.ir
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/microfrontend_ir/348