فروش ویژه سرور اختصاصی
ماکرونت: تفاوت بین concurrency و parallelism چیست؟
- فروردین 27, 1402
- 0
- ملیحه ایزی
concurrency و parallelism دو مفهومی که بسیار به هم نزدیک هستند و اغلب برنامه نویسان آن را اشتباه می گیرند. در بسیاری از مصاحبه های شغلی نیز در این باره سوال پرسیده می شود پس بیایید یک بار برای همیشه در این بلاگ تفاوت این دو کلمه و مفهوم را با یکدیگر یاد بگیریم.
تاریخچه
کامپیوترها از زمانی که معرفی شدند به سرعت در حال تکامل و پیشرفت هستند. اولین کامپیوترها دارای پردازنده های تک هسته ای بودند، به این معنی که آنها فقط می توانستند یک عملیات را در یک زمان پردازش کنند. یک عملیات باید منتظر عملیات دیگر می ماند تا شروع شود.
پردازندههای تک هستهای برای اجرای متوالی برنامهها طراحی شده بودند، جایی که وظیفه اول توسط دوم، دوم توسط سوم و غیره دنبال میشود.
تصور کنید می خواهید یک تخم مرغ را بپزید. با گذاشتن تابه روی آتش، ریختن مقداری روغن در تابه، شکستن تخم مرغ، اجازه دادن به تخم مرغ برای پخته شدن و سپس سرو کردن تخم مرغ شروع می شود. شما نمی توانید این مراحل را به ترتیبی دیگر و یا موازی اجرا کنید.
ظهور پردازنده های چند هسته ای، رایانه هایی را معرفی کرد که می توانستند چندین فرآیند را همزمان انجام دهند. با چندین پردازنده، چندین عملیات می توانند همزمان اجرا شوند.
تصور کنید در آشپزخانه مشغول تهیه یک وعده غذایی هستید. می توانید در حین تهیه سالاد از یکی از دوستانتان دعوت کنید تا سوپ را هم بزند. هم زدن سوپ و تهیه سالاد همزمان در حال اجراست.
برخی از خوانندگان دقیق ممکن است بیانیه فوق را به چالش بکشند و ادعا کنند که پردازنده های تک هسته ای می توانند همزمان چندین عملیات را انجام دهند و این موضوع تا حدی درست است، اینجاست که بحث بین همزمانی و موازی سازی مطرح می شود.
تفاوت بین همزمانی و موازی سازی چیست؟
این تشبیه عالی از Grokking Concurrency اثر کریل بابروف تصویری عالی را به تصویر میکشد.
تصور کنید در حال خرد کردن سالاد هستید در حالی که گهگاه باید سوپ را هم بزنید. شما باید خرد کردن را متوقف کنید، قابلمه سوپ را بررسی کنید، و سپس دوباره ادامه دهید و روند را تکرار کنید تا همه چیز تمام شود. ما در اینجا یک منبع پردازش داریم (شما)، این همزمانی است.
حالا تصور کنید که با یک دوست در آشپزخانه هستید. کار شما خرد کردن سالاد است در حالی که کار دوستتان بررسی قابلمه سوپ است. اکنون دو سرآشپز داریم، یکی که می تواند هم زدن را انجام دهد و دیگری می تواند سالاد را خرد کند. ما کار را با افزودن یک منبع پردازش دیگر (دوست شما) تقسیم کرده ایم. این موازی سازی است.موازی بودن یک ویژگی اجرایی است. موازی سازی به معنای واقعی کلمه اجرای فیزیکی همزمان وظایف در زمان اجرا است و به سخت افزاری با منابع محاسباتی متعدد نیاز دارد. روی لایه سخت افزاری قرار دارد.
موازی سازی یک زیر طبقه از همزمانی است: قبل از اینکه بتوانید چندین کار را همزمان انجام دهید، ابتدا باید چندین کار را مدیریت کنید.
همزمانی به معنای برخورد همزمان با کارهاست. موازی سازی به معنای انجام بسیاری از کارها در یک زمان واحد است.
– راب پایک
همزمانی در مورد وظایف متعددی است که بدون ترتیب خاصی در دوره های مختلف شروع و گاهی دارای همپوشانی نیز می شوند. موازی سازی در مورد چندین کار یا وظایف فرعی یک کار است که به طور همزمان اجرا می شوند.
همزمانی در مورد ساختار است. این در مورد طراحی سیستم است. این راهی برای ساختار یک راه حل برای یک مشکل است که ممکن است لزوماً قابل موازی سازی نباشد. موازی سازی در مورد اجرای واقعی است.
همزمانی را می توان با استفاده از یک واحد پردازش انجام داد. با استفاده از الگوریتمهای زمانبندی که زمان CPU را تقسیم میکنند (زمان برش)، فرآیندها به هم متصل میشوند. موازی سازی به سخت افزار با منابع محاسباتی متعدد مانند سیستم های چند پردازنده ای و چند هسته ای برای اجرای همزمان فرآیندها نیاز دارد.
برنامه نویسی همزمان معمولاً عمومی تر از برنامه نویسی موازی در نظر گرفته می شود زیرا می تواند شامل الگوهای دلخواه و پویا ارتباط و تعامل باشد، در حالی که سیستم های موازی معمولاً دارای یک الگوی ارتباطی از پیش تعریف شده و ساختار یافته هستند.
نتیجه
خط بسیار باریکی بین این دو اصطلاح وجود دارد. برنامه نویسان معمولاً آنها را به جای یکدیگر استفاده می کنند زیرا بسیاری از برنامه ها جنبه های هر یک را دارند.
برای درک بیشتر در مورد تمایز بین همزمانی و موازی، به نکات زیر توجه کنید: یک برنامه می تواند همزمان باشد اما موازی نباشد، به این معنی که همزمان بیش از یک کار را پردازش می کند، اما هیچ دو وظیفه ای در همان لحظه اجرا نمی شود. یک برنامه می تواند موازی باشد اما همزمان نباشد، به این معنی که چندین کار فرعی از یک کار واحد را همزمان پردازش می کند. یک برنامه نه موازی و نه همزمان می تواند باشد، به این معنی که یک کار را در یک زمان، به صورت متوالی پردازش می کند، و کار هرگز به وظایف فرعی تقسیم نمی شود. یک برنامه کاربردی می تواند هم موازی و هم همزمان باشد، به این معنی که چندین کار یا وظایف فرعی یک وظیفه را همزمان پردازش می کند (اجرای آنها به صورت موازی). بسیاری از برنامه ها جنبه هایی از هر کدام دارند. تصور کنید برنامه ای دارید که مقادیر را در جدول هش درج می کند. اگر عملیات درج را بین چندین هسته پخش کنید، این موازی است. اما هماهنگی دسترسی به جدول هش همزمانی است.
«ملیحه ایزی»، فارغالتحصیل مقطع کارشناسی ارشد مهندسی کامپیوتر، گرایش نرم افزار است.
تمامی حقوق برای ماکرونت محفوظ است.