Microfrontend.ir
1.44K subscribers
221 photos
3 videos
2 files
272 links
کانال تلگرامی وبلاگ میکروفرانت‌اند. مباحثی پیرامون هوش مصنوعی و یادگیری ماشین، معماری نرم افزار با تمرکز بر DDD ، میکروسرویس و میکروفرانت‌اند
www.microfrontend.ir

@hemanhp2
Download Telegram
ددلاک یا بن بست در سیستمهای همزمان: ریشه مشکل و راهکارهای پیشگیرانه

در طراحی و پیادهسازی سیستمهای کانکارنت یا مالتی ترد، یکی از خطراتی که میتواند عملکرد سیستم را مختل کند 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
👍96🔥1
Audio
من عموما تلاش میکنم خیلی زیاد نت بردارم. ممکنه نت‌های یک فصل از کتاب بخاطر ارجاعات و زیرنویس‌هاش به اندازه خود فصل باشه و همین زیاد بودن ممکنه بازگشت بهش رو برام سخت کنه. اما نوت بوک ال ام بسیار بهم کمک کرده. حالا مستقیما از Obsidian میبرم NotebookLM و پادکستشو جنریت می‌کنم و اتچ میکنم و میتونم راحت تر بهش برگردم.

این فایل سمپل برای نتیه که دو قانون در فضای کانکارنسی که دوست داشتم.

پ.ن: در حال تدوین یک دوره برنامه نویسی پارالل و کانکارنت در زبان گو و پایتون هستم :)



〰️〰️〰️〰️〰️〰️
© | @microfrontend_ir
24👍6🔥4
Please open Telegram to view this post
VIEW IN TELEGRAM
RabbitMQ
Data in Motion

Full Playlist Coming Soon

https://youtube.com/@microfrontend?si=di-iPW6iEczvudXS
🔥314👍4
باید پذیرفت که جنگ قاعده تاریخ و صلح استثنای بشر است، در نگاه اول تلخ و ناامیدکننده به نظر می‌رسد، چرا که مرور تاریخ بشری اغلب با فتوحات، درگیری‌ها و خونریزی‌ها همراه بوده و دوره‌های صلح به نظر می‌رسد تنها نقطه‌های روشن و گذرایی در این تاریکی بی‌پایان بوده‌اند. اما همین "استثنا" بودن صلح، خود نشان از ارزش بی‌بدیل و جایگاه رفیع آن دارد؛ چیزی که کمیاب است، گرانبهاست. هرچند تحقق صلح دشوار است و به تلاش، گفت‌وگو و اراده جمعی نیاز دارد، اما هر دوره صلح در تاریخ، گواهی بر این حقیقت است که انسانیت قادر به عبور از چرخه‌های خشونت و ساختن جهانی بهتر است. جنگ ممکن است تکرار شونده باشد، اما صلح انتخاب ماست. انتخابی که با گام‌های هرچند کوچک در مسیر مهربانی، درک متقابل و همدلی، همراه خواهد بود.

بەرخۆدان ژیانە!
مقاومت زندگی‌ست!
39👍5