برنامه level-up مبحث ۲
قبل شروع مقایسه این دو مفهوم، بیایم و معنی لغویشون بررسی کنیم:
Concurrent: اتفاق افتادن و یا وجود داشتن در یک زمان. رقیب.
Parallel: دو خطی که همدیگر رو در هیچ نقطهای قطع نکنن رو موازی میگن.
در واقع، همزمانی سروکار داشتن با چندین چیز در یک زمانه، و موازی بودن، انجامدادن چندین چیز به طور همزمانه. موازی بودن یک روش برای پیادهسازیه درحالیکه همزمانی یک ساختار برنامه است.
در این تصویر تفاوت همزمانی (Concurrent) و موازی بودن (Parallel) چطور مشخص شده؟
در سیستمهای پاسخگو به رویداد (Event Handling) مثل ماشین فروش خوراکی، وبسرورها، همزمانی در نهایت مشکل ایجاد میکنه و باید اختلال غیرقابل پیشبینی و اجتنابناپذیر بین دو درخواست رو حل کرد (Race condition). موازی سازی، یک بخش از راهحله - سرعت رو بیشتر میکنه، اما ریشه مشکل همزمانیه.
در سیستمهای محاسباتی مثل جعبههدیهها، گرافیکها، Computer Vision و Scientific Computing، همزمانی، بخشی از مشکل نیست. یک خروجی رو براساس ورودیهای شناخته شده از قبل، بدون هیچ رویداد خارجیای محاسبه میکنیم. موازی کار کردن، جایی هست که مشکل ایجاد میشه، سرعت رو بالا میبره، ولی ممکنه باگ ایجاد بشه.
در سیستمهای محاسباتی، اگر هربار یک نتیجه رو دریافت کنی، احتمالا باگ همزمانی نداری. در سیستمهای پاسخگو به رویداد، تنها نشونه نداشتن باگ موازی بودن اینه که همیشه جواب درست بگیری. با دو کاربری که در برداشت پول از یک حساب مشترک دارن رقابت میکنن، نمیشه انتظار داشت همیشه یک نتیجه به دست بیاد. اما میشه انتظار داشت که موجودی اکانت هیچوقت منفی نشه. یا نمیشه که یک حساب رو دوبار تخلیه کنی.