دیگه Concurrency و Parallelism رو اشتباه تعریف نکن!

دیگه Concurrency و Parallelism رو اشتباه تعریف نکن!

دو مفهوم Concurrent و Parallel شباهت های زیادی به هم دارند که باعث می شود بسیاری از برنامه نویس ها در تشخیص و تعریف این دو مفهوم اشتباه های بدی کنند. در بسیاری از مصاحبه های شغلی هم درباره ی این مفاهیم سوال پرسید می شود. با خواندن این مقاله، دیگه در تعریف این مفاهیم اشتباه نمی کنی و شانس خودت رو برای موفقیت در مصاحبه های شغلی بالا می بری.

در تصویر بالا رفتار یک برنامه ی Parallel را در کنار رفتار برنامه ی Concurrent می بینید. این تصویر را برای شروع مقاله انتخاب کردن تا با دقت در آن، بتوانید کل متن مقاله را حدس بزنید 😉 پیشنهاد می کنم بعد از مطالعه ی بقیه ی مقاله، این تصویر را ذخیره کنید تا هربار به مرور نیاز داشتید، فقط همین تصویر را با دقت مرور کنید. 

موضوع Concurrent و Parallel زمانی مطرح می شود که برنامه ی ما در یک بازه ی زمانی مشخص چندین کار مختلف برای انجام دادن داشته باشد. و این دو روش، راه حل کامپیوتر ما برای انجام چندین وظیفه به گونه ایست که ما احساس خوبی از عملکرد برنامه داشته باشیم.

Concurrency چیست؟

Concurrency یا همزمانی، یعنی برنامه ی ما می خواهد به صورت همزمان چندین فرآیند را به صورت مستقل از هم اجرا کند. این شرایط ممکن است در برنامه ها و سایت های به صورت مکرر پیش بیاید. برای مثال بیایید یک وب سایت فروشگاهی ساده را فرض کنیم و لیستی از وظایف همزمانی را که باید اجرا کند، ارزیابی کنیم:

  • اجرای یک بنر در بالای صفحه با آخرین معاملات و محصولات.
  • نمایش تعداد کاربران آنلاین وب سایت.
  • درصورت انتخاب محصول توسط کاربر، جزئیات سبد خرید کاربر را به روز کنید.
  • کنترل تایمر برای "فروش میلیاردی بزرگ" بعدی و غیره.

وب سایت ما باید تمام این وظایف را همزمان انجام دهد تا مشتری را با برنامه درگیر کند و وب سایت را برای کاربر جذاب کند و مشتری های بیشتری را به خود جلب کند.

بنابراین، یک اپلیکیشن یا وب‌سایت ساده می‌تواند مجموعه‌ای از وظایف متعددی باشد که در پس‌زمینه اجرا می‌شوند تا نیازهای کسب و کار را برآورده کنند.

در هر دو تصویر بالا، چندین کار به طور همزمان اجرا می شوند، اما بین اجراها تفاوت وجود دارد. بیایید این دو مفهوم را کمی بیشتر بررسی کنیم تا تفاوت شان را درک کنیم.

درک Concurrency (اجرای همزمان) در مقابل Parallelism (اجرای موازی)

Concurrency vs Parallelism

کار با برنامه های Concurrent

بیایید فرض کنیم که ما یک سیستم تک هسته ای داریم و چندین کار برای انجام دادن. اما محدودیتی داریم که طبق آن، در هر لحظه از زمان، تنها یک وظیفه را می توانیم روی تک هسته ی موجود اجرا کنیم. در مدل اجرای همزمان، Context Switch بین وظایف وجود دارد. به نمودار بالا دقت کنید، Context Switch به آن جاهایی گفته می شود که بین کاری که قرار است انجام شود جابجایی اتفاق می افتد. بنابراین برنامه با چندین کار سر و کار دارد اما آنها را با هم اجرا نمی کند زیرا ما فقط یک هسته اجرایی داریم.

Context Switch به قدری سریع بین کارها انجام می شود که به نظر می رسد کارها همزمان در حال اجرا هستند. درحالی که اصلا بخاطر اینکه سیستم ما تک هسته ای است، قابلیت اجرای موازی کارهای برنامه را ندارد.

به تصویر بالا کمی دقت کنید؛ دو کار برای انجام وجود دارد، و در اجرای همزمان (بدون موازی سازی) شاهد این هستیم که در هر لحظه ای از زمان (نمودار افقی زمان را نشان می دهد) فقط یکی از این کارها درحال انجام است ولی به طور مکرر Context Switch اتفاق می افتد.

اضافه کردن Parallelism به برنامه

اگر قرار باشد CPU سیستم شما فقط یک هسته داشته باشد، در نتیجه شما محدودیت منابع دارید و سیستم شما شما توانایی اجرای Parallel برنامه را ندارد ولی اگر پردازنده ی سیستم شما چند هسته داشته باشد، حالا کارهای مختلف به هسته های مختلف سپرده می شود و واقعا به طور موازی کارها انجام می شود. بازهم به نمودار بالا دقت کنید، همانطور که می بینید در زمان های مختلف، سیستم هر دو کار خواسته شده را انجام می دهد.

امیدوارم که تفاوت ها و نحوه ی کار کردن این دو مفهوم جذاب در کامپیوتر را یادگرفته باشد. اگر سوالی داشتید در قسمت کامنت ها بنویسید، حتما پاسخ خواهم داد و البته اگر دوست داشتید ❤ کنید.

 

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon