09982292579
info@mehraeen.ac.ir
فارسی پرچم
فارسی
یک زبان را انتخاب کنید
فارسی پرچم
فارسی
0
دسته ها
خانه تقویم‌آموزشی مدرس وبلاگ چارت‌‌دروس تماس‌با‌ما درباره‌ما انجمن‌ها
برنامه سازی پیشرفته

جلسه 17برنامه سازي همروند

خلاصه نکات کلیدی همروندی ابزاری قدرتمند برای افزایش کارایی و پاسخگویی است، اما نیازمند درک عمیق مفاهیم و مدیریت دقیق چالش‌هاست. تمایز بین فرایند و نخ در مدیریت منابع و ایزوله‌سازی اهمیت دارد. شرایط رقابتی، بن‌بست و گرسنگی از جمله مشکلات رایج در سیستم‌های همروند هستند. مکانیزم‌های همگام‌سازی (قفل‌ها، سمافورها، متغیرهای شرطی) برای جلوگیری از این مشکلات و تضمین صحت اجرای برنامه‌ها ضروری هستند. انتخاب ابزار و الگوی مناسب برای پیاده‌سازی برنامه سازی همروند، تاثیر بسزایی در موفقیت پروژه دارد. تمرین پایان فصل

مقدمه و مفاهیم پایه


  • تعریف: برنامه سازی همروند به اجرای چندین بخش از یک برنامه یا چندین برنامه به طور همزمان اشاره دارد. این برخلاف برنامه سازی ترتیبی است که دستورات به صورت خطی و پشت سر هم اجرا می‌شوند.

  • هدف: افزایش کارایی، پاسخگویی بهتر، و استفاده بهینه از منابع سیستم (مخصوصا پردازنده‌های چند هسته‌ای).

  • تمایز با پردازش موازی: همروندی به معنای همزمان بودن شروع و اجرا است، در حالی که موازی‌سازی به معنای اجرای واقعی همزمان در واحدهای پردازشی مجزا است. همروندی می‌تواند روی یک هسته نیز پیاده‌سازی شود (مثلاً با زمان‌بندی).

۲. واحدها و ساختارهای همروند


  • فرایند (Process): یک نمونه اجرایی از برنامه که شامل فضای آدرس مستقل، منابع سیستمی (فایل‌ها، سوکت‌ها) و نخ‌های اجرایی است. فرایندها ایزوله هستند و ارتباط بین آن‌ها نیازمند مکانیزم‌های خاص (IPC) است.

  • نخ (Thread): واحد سبک‌تری از اجرا در درون یک فرایند. نخ‌ها فضای آدرس مشترک با فرایند والد خود دارند و منابع را به اشتراک می‌گذارند. این اشتراک‌گذاری باعث افزایش کارایی و سادگی ارتباط بین نخ‌ها می‌شود، اما چالش‌های همگام‌سازی را نیز به همراه دارد.

  • تفاوت کلیدی: هزینه ایجاد و مدیریت فرایندها بالاتر از نخ‌ها است. اشتراک‌گذاری منابع در نخ‌ها ساده‌تر اما نیازمند دقت بیشتر در مدیریت همزمانی است.

۳. چالش‌های برنامه سازی همروند


  • شرایط رقابتی (Race Condition): زمانی رخ می‌دهد که خروجی محاسبات به ترتیب اجرای نخ‌ها یا فرایندها بستگی داشته باشد و این ترتیب غیرقابل پیش‌بینی باشد. این وضعیت منجر به نتایج نادرست و غیرقابل تکرار می‌شود.

  • بن‌بست (Deadlock): وضعیتی که دو یا چند فرایند/نخ منتظر منابعی هستند که توسط یکدیگر نگه داشته شده‌اند و هیچ‌کدام قادر به ادامه اجرا نیستند.

  • گرسنگی (Starvation): وضعیتی که یک فرایند/نخ به دلیل اولویت‌بندی یا زمان‌بندی نامناسب، هرگز به منابع مورد نیاز خود دسترسی پیدا نمی‌کند.

  • همگام‌سازی (Synchronization): مکانیزم‌هایی برای کنترل دسترسی به منابع مشترک و مدیریت ترتیب اجرای عملیات بین واحدهای همروند، به منظور جلوگیری از شرایط رقابتی و تضمین صحت نتایج.

۴. مکانیزم‌های همگام‌سازی


  • بخش بحرانی (Critical Section): قسمتی از کد که در آن به منابع مشترک دسترسی وجود دارد. باید اطمینان حاصل شود که در هر لحظه، تنها یک واحد اجرایی (نخ/فرایند) در بخش بحرانی مربوط به یک منبع مشترک قرار دارد.

  • قفل‌ها (Locks/Mutexes): مکانیزم‌هایی که به یک نخ/فرایند اجازه می‌دهند تا یک منبع مشترک را “قفل” کند و از دسترسی سایرین به آن جلوگیری نماید تا زمانی که قفل را “باز” کند.

  • سِمافورها (Semaphores): شمارنده‌هایی که برای کنترل دسترسی به مجموعه‌ای از منابع یا مدیریت عملیات بین فرایندها/نخ‌ها استفاده می‌شوند. می‌توانند برای پیاده‌سازی قفل‌ها و موارد پیچیده‌تر نیز به کار روند.

  • متغیرهای شرطی (Condition Variables): مکانیزمی که به نخ‌ها اجازه می‌دهد منتظر وقوع یک شرط خاص بمانند و پس از وقوع آن، توسط نخ دیگری که شرط را ایجاد کرده، بیدار شوند. این مکانیزم اغلب همراه با قفل‌ها استفاده می‌شود.

  • اتمیک بودن عملیات (Atomic Operations): عملیاتی که به صورت غیرقابل تقسیم اجرا می‌شوند؛ یعنی یا به طور کامل انجام می‌شوند یا اصلاً انجام نمی‌شوند و در طول اجرای آن‌ها، هیچ واحد اجرایی دیگری نمی‌تواند وضعیت میانی آن را مشاهده یا تغییر دهد.

۵. الگوهای طراحی همروند (Concurrency Design Patterns)


  • کپی-تغییر-بازنویسی (Copy-on-Write): تکنیکی برای به اشتراک‌گذاری داده‌ها به صورت ایمن. داده‌ها به صورت اشتراکی خوانده می‌شوند و تنها زمانی که نیاز به تغییر باشد، یک کپی از داده ایجاد شده و تغییرات روی آن اعمال می‌شود.

  • مولد/مصرف‌کننده (Producer-Consumer): الگویی که در آن یک یا چند واحد اجرایی (مولد) داده تولید کرده و در یک بافر مشترک قرار می‌دهند، و یک یا چند واحد اجرایی دیگر (مصرف‌کننده) داده‌ها را از بافر برداشته و پردازش می‌کنند.

  • حسابدار ( ப்ப்): الگویی برای پیاده‌سازی شمارنده‌ها یا جمع‌کننده‌های توزیع شده به صورت همروند.

  • ماشین وضعیت (State Machine): استفاده از ماشین‌های وضعیت برای مدیریت حالت‌های مختلف یک سیستم همروند و اطمینان از انتقال‌های صحیح بین حالت‌ها.

۶. ابزارها و زبان‌های برنامه سازی


  • محیط‌های POSIX Threads (pthreads): کتابخانه‌ای استاندارد در سیستم‌های شبه یونیکس برای ایجاد و مدیریت نخ‌ها.

  • APIهای ویندوز: مکانیزم‌های مشابه برای مدیریت نخ‌ها و همگام‌سازی در سیستم‌عامل ویندوز.

  • زبان‌های سطح بالا: زبان‌هایی مانند Java (با synchronized, java.util.concurrent), C++ (با <thread>, <mutex>), Python (با threading, multiprocessing), Go (با Goroutines و channels) مکانیزم‌های قدرتمندی برای برنامه سازی همروند ارائه می‌دهند.

  • کتابخانه‌ها و فریم‌ورک‌ها: استفاده از کتابخانه‌های تخصصی برای مدیریت وظایف همروند، صف‌های کار (Task Queues) و پردازش توزیع شده.


خلاصه نکات کلیدی


  • همروندی ابزاری قدرتمند برای افزایش کارایی و پاسخگویی است، اما نیازمند درک عمیق مفاهیم و مدیریت دقیق چالش‌هاست.

  • تمایز بین فرایند و نخ در مدیریت منابع و ایزوله‌سازی اهمیت دارد.

  • شرایط رقابتی، بن‌بست و گرسنگی از جمله مشکلات رایج در سیستم‌های همروند هستند.

  • مکانیزم‌های همگام‌سازی (قفل‌ها، سمافورها، متغیرهای شرطی) برای جلوگیری از این مشکلات و تضمین صحت اجرای برنامه‌ها ضروری هستند.

  • انتخاب ابزار و الگوی مناسب برای پیاده‌سازی برنامه سازی همروند، تاثیر بسزایی در موفقیت پروژه دارد.


تمرین پایان فصل



















  1. یک سناریوی فرضی تعریف کنید که در آن اجرای ترتیبی دستورات منجر به نتایج نادرست می‌شود (مثال: یک شمارنده مشترک که توسط دو نخ افزایش می‌یابد). مشکل را توضیح دهید.

  2. چگونه می‌توان با استفاده از یک قفل (Mutex) از بروز شرایط رقابتی در سناریوی بالا جلوگیری کرد؟ کد شبه (pseudo-code) آن را بنویسید.

  3. تفاوت اصلی بین بن‌بست (Deadlock) و گرسنگی (Starvation) را توضیح دهید.

  4. الگوی مولد/مصرف‌کننده را شرح دهید و بگویید در چه نوع مسائلی کاربرد دارد.

  5. چرا مدیریت صحیح حافظه و اشتراک‌گذاری داده‌ها در برنامه‌های همروند حیاتی است؟
درس متنی 17/19
در حال مشاهده
جلسه 17برنامه سازي همروند