همزمانی در مقابل موازی – انجمن DEV

Summarize this content to 400 words in Persian Lang
برای توسعه دهندگان نسبتاً معمول است که مفاهیم همزمانی و موازی را با هم مخلوط کنند، اما در واقع کاملاً متمایز هستند. بیایید با استفاده از یک قیاس کافی شاپ به این دو مفهوم نزدیک شویم.
کافی شاپی را تصور کنید با یک گارسون که سفارشات را می گیرد و با استفاده از یک دستگاه قهوه درست می کند. مشتریان در صف منتظر می مانند، سفارشات خود را ثبت می کنند و سپس منتظر قهوه خود می مانند:
اگر پیشخدمت برای همگام شدن با تعداد مشتریان مشکل داشته باشد، صاحب کافی شاپ ممکن است تصمیم بگیرد با درگیر کردن پیشخدمت دوم و خرید دستگاه قهوه ساز دوم، روند کلی را تسریع بخشد. اکنون، دو پیشخدمت می توانند به طور همزمان به مشتریان خدمات ارائه دهند:
در این تنظیمات، دو پیشخدمت به طور مستقل کار می کنند. هر کدام دستگاه قهوه ساز مخصوص به خود را دارند که به فروشگاه اجازه می دهد دو برابر سریعتر به مشتریان خدمات ارائه دهد. این موازی سازی است – اجرای چندین کار به طور همزمان با افزودن منابع بیشتر (پیشخدمت ها و ماشین ها).
اگر بخواهیم مقیاس بیشتری داشته باشیم، میتوانیم به اضافه کردن پیشخدمتها و ماشینهای بیشتری ادامه دهیم، اما این رویکرد محدودیتهایی دارد. به عنوان مثال، خرید چند دستگاه قهوه ساز می تواند بسیار گران باشد.
به جای اینکه فقط ماشینهای بیشتری اضافه کنیم، میتوانیم ساختار کار را دوباره بررسی کنیم. یکی از راههای انجام این کار، تقسیم وظایف بین پیشخدمتها است: یکی سفارش میگیرد و دیگری با استفاده از دستگاه قهوهساز قهوه درست میکند. برای جلوگیری از مسدود کردن صف مشتریان، ما یک صف دوم را معرفی می کنیم که در آن مشتریان منتظر قهوه خود هستند (مشابه استارباکس):
در اینجا، آنچه ما تغییر داده ایم ساختار کلی است. این همزمانی است کارها به گونه ای طراحی شده اند که به طور مستقل انجام شوند، حتی اگر همزمان اتفاق نیفتند.
حال، تصور کنید هر رشته در یک برنامه یک نقش را نشان می دهد: یک رشته برای گرفتن سفارش و دیگری برای تهیه قهوه. این رشته ها به طور مستقل کار می کنند اما باید هماهنگ شوند. به عنوان مثال، نخ های سفارش باید اطلاعاتی در مورد آنچه که باید آماده کنند به نخ قهوه ساز منتقل کنند.
اگر بخواهیم ظرفیت مغازه را بیشتر افزایش دهیم چه؟ از آنجایی که تهیه قهوه بیشتر از سفارش گرفتن طول می کشد، می توانیم پیشخدمت دیگری را به طور خاص برای تهیه قهوه استخدام کنیم:
آیا ساختار تغییر کرده است؟ نه. این هنوز یک طراحی سه مرحله ای است:
قبول سفارشات
قهوه درست کن
قهوه سرو کنید
با این حال، با اضافه کردن یک پیشخدمت دیگر فقط برای تهیه قهوه، موازی سازی را در این مرحله خاص بدون تغییر ساختار کلی همزمانی وارد می کنیم.
به یاد داشته باشید که در حالی که موازی و همزمانی متمایز هستند، می توانند مکمل یکدیگر باشند. موازیسازی میتواند بدون همزمانی وجود داشته باشد، اما همزمانی میتواند موازیسازی را فعال کند، زیرا ساختاری را برای حل یک مشکل با بخشهایی که ممکن است موازی شوند فراهم میکند.
به طور خلاصه:
همزمانی در مورد ساختار است و ما راه حلی طراحی می کنیم تا بتوان قطعات را به طور مستقل مدیریت کرد. این لزوماً به این معنی نیست که آنها همزمان اجرا می شوند، بلکه به این معنا نیست که به گونه ای سازماندهی شده اند که امکان اجرای کارآمدتر را فراهم می کند.
موازی سازی در مورد اجرا، انجام چندین کار به طور همزمان با افزودن رشته های بیشتر است.
فردا، ما به بررسی مفاهیم همزمانی و موازی با بحث در مورد کوروتین ها ادامه خواهیم داد.
این پست از خبرنامه The Coder Cafe است.
آیا احساس می کنید تحت تأثیر جریان بی پایان محتوای فناوری قرار گرفته اید؟ در The Coder Cafe، ما روزانه یک مفهوم ضروری را برای کدنویس ها ارائه می کنیم. توسط یک مهندس نرم افزار در گوگل نوشته شده است، این نوشیدنی کاملاً برای قهوه صبح شما تهیه شده است و به شما کمک می کند مهارت های خود را عمیقاً رشد دهید.
برای توسعه دهندگان نسبتاً معمول است که مفاهیم همزمانی و موازی را با هم مخلوط کنند، اما در واقع کاملاً متمایز هستند. بیایید با استفاده از یک قیاس کافی شاپ به این دو مفهوم نزدیک شویم.
کافی شاپی را تصور کنید با یک گارسون که سفارشات را می گیرد و با استفاده از یک دستگاه قهوه درست می کند. مشتریان در صف منتظر می مانند، سفارشات خود را ثبت می کنند و سپس منتظر قهوه خود می مانند:
اگر پیشخدمت برای همگام شدن با تعداد مشتریان مشکل داشته باشد، صاحب کافی شاپ ممکن است تصمیم بگیرد با درگیر کردن پیشخدمت دوم و خرید دستگاه قهوه ساز دوم، روند کلی را تسریع بخشد. اکنون، دو پیشخدمت می توانند به طور همزمان به مشتریان خدمات ارائه دهند:
در این تنظیمات، دو پیشخدمت به طور مستقل کار می کنند. هر کدام دستگاه قهوه ساز مخصوص به خود را دارند که به فروشگاه اجازه می دهد دو برابر سریعتر به مشتریان خدمات ارائه دهد. این موازی سازی است – اجرای چندین کار به طور همزمان با افزودن منابع بیشتر (پیشخدمت ها و ماشین ها).
اگر بخواهیم مقیاس بیشتری داشته باشیم، میتوانیم به اضافه کردن پیشخدمتها و ماشینهای بیشتری ادامه دهیم، اما این رویکرد محدودیتهایی دارد. به عنوان مثال، خرید چند دستگاه قهوه ساز می تواند بسیار گران باشد.
به جای اینکه فقط ماشینهای بیشتری اضافه کنیم، میتوانیم ساختار کار را دوباره بررسی کنیم. یکی از راههای انجام این کار، تقسیم وظایف بین پیشخدمتها است: یکی سفارش میگیرد و دیگری با استفاده از دستگاه قهوهساز قهوه درست میکند. برای جلوگیری از مسدود کردن صف مشتریان، ما یک صف دوم را معرفی می کنیم که در آن مشتریان منتظر قهوه خود هستند (مشابه استارباکس):
در اینجا، آنچه ما تغییر داده ایم ساختار کلی است. این همزمانی است کارها به گونه ای طراحی شده اند که به طور مستقل انجام شوند، حتی اگر همزمان اتفاق نیفتند.
حال، تصور کنید هر رشته در یک برنامه یک نقش را نشان می دهد: یک رشته برای گرفتن سفارش و دیگری برای تهیه قهوه. این رشته ها به طور مستقل کار می کنند اما باید هماهنگ شوند. به عنوان مثال، نخ های سفارش باید اطلاعاتی در مورد آنچه که باید آماده کنند به نخ قهوه ساز منتقل کنند.
اگر بخواهیم ظرفیت مغازه را بیشتر افزایش دهیم چه؟ از آنجایی که تهیه قهوه بیشتر از سفارش گرفتن طول می کشد، می توانیم پیشخدمت دیگری را به طور خاص برای تهیه قهوه استخدام کنیم:
آیا ساختار تغییر کرده است؟ نه. این هنوز یک طراحی سه مرحله ای است:
-
قبول سفارشات
-
قهوه درست کن
-
قهوه سرو کنید
با این حال، با اضافه کردن یک پیشخدمت دیگر فقط برای تهیه قهوه، موازی سازی را در این مرحله خاص بدون تغییر ساختار کلی همزمانی وارد می کنیم.
به یاد داشته باشید که در حالی که موازی و همزمانی متمایز هستند، می توانند مکمل یکدیگر باشند. موازیسازی میتواند بدون همزمانی وجود داشته باشد، اما همزمانی میتواند موازیسازی را فعال کند، زیرا ساختاری را برای حل یک مشکل با بخشهایی که ممکن است موازی شوند فراهم میکند.
به طور خلاصه:
-
همزمانی در مورد ساختار است و ما راه حلی طراحی می کنیم تا بتوان قطعات را به طور مستقل مدیریت کرد. این لزوماً به این معنی نیست که آنها همزمان اجرا می شوند، بلکه به این معنا نیست که به گونه ای سازماندهی شده اند که امکان اجرای کارآمدتر را فراهم می کند.
-
موازی سازی در مورد اجرا، انجام چندین کار به طور همزمان با افزودن رشته های بیشتر است.
فردا، ما به بررسی مفاهیم همزمانی و موازی با بحث در مورد کوروتین ها ادامه خواهیم داد.
این پست از خبرنامه The Coder Cafe است.
آیا احساس می کنید تحت تأثیر جریان بی پایان محتوای فناوری قرار گرفته اید؟ در The Coder Cafe، ما روزانه یک مفهوم ضروری را برای کدنویس ها ارائه می کنیم. توسط یک مهندس نرم افزار در گوگل نوشته شده است، این نوشیدنی کاملاً برای قهوه صبح شما تهیه شده است و به شما کمک می کند مهارت های خود را عمیقاً رشد دهید.