حمزه قائم پناه
حمزه قائم پناه
خواندن ۲ دقیقه·۲ سال پیش

تفاوت Parallelism و Concurrency

برنامه level-up مبحث ۲

قبل شروع مقایسه این دو مفهوم، بیایم و معنی لغوی‌شون بررسی کنیم:
Concurrent: اتفاق افتادن و یا وجود داشتن در یک زمان. رقیب.
Parallel: دو خطی که همدیگر رو در هیچ نقطه‌ای قطع نکنن رو موازی می‌گن.

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

در این تصویر تفاوت هم‌زمانی (Concurrent) و موازی بودن (Parallel) چطور مشخص شده؟

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

در سیستم‌های پاسخگو به رویداد (Event Handling) مثل ماشین فروش خوراکی، وب‌سرور‌ها، همزمانی در نهایت مشکل ایجاد می‌کنه و باید اختلال غیرقابل پیش‌بینی و اجتناب‌ناپذیر بین دو درخواست رو حل کرد (Race condition). موازی سازی، یک بخش از راه‌حله - سرعت رو بیشتر می‌کنه، اما ریشه مشکل هم‌زمانیه.

در سیستم‌های محاسباتی مثل جعبه‌هدیه‌ها، گرافیک‌ها، Computer Vision و Scientific Computing، هم‌زمانی، بخشی از مشکل نیست. یک خروجی رو براساس ورودی‌های شناخته شده از قبل، بدون هیچ رویداد خارجی‌ای محاسبه می‌کنیم. موازی کار کردن، جایی هست که مشکل ایجاد میشه، سرعت رو بالا می‌بره، ولی ممکنه باگ ایجاد بشه.

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

concurrencyparallelismrace conditionprogrammingatomic
مهندس نرم‌افزار و عاشق توسعه فردی - مهندس نرم‌افزار - اکس هم بنیان‌گذار و مدیرفنی و پرداکت استارتاپ کشمون
شاید از این پست‌ها خوشتان بیاید