"Mahdi"
"Mahdi"
خواندن ۳ دقیقه·۲ سال پیش

تفاوت sequenatial, synchronous, asynchronous

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

مثال اول : انجام دادن کار های اداری به صورت sequential

احتمالا کم و بیش با یکسری کارهای اداری سر و کار داشتید . فرض کنید که به شما گفته شده که باید اول برید پیش آقای A و اون آقا نامه ای به شما میده سپس اون نامه رو ببرین طبقه ی اول پیش خانم B و اونجا هم یه امضا بزنه و یه چیز اضافه کنه و در نهایت این رو ببرید پیش رئیس تا کارتون تموم بشه . خوب توی این تسک به شما یک دستورالعمل داده شده که دارای ترتیب هست و شما نمیتونید قبل از اینکه امضای آقای A رو داشته باشید برید پیش رئیس . باید دقیقا طبق ترتیب انجام شده پیش برید و حتی اگه همراه با دوستتون هم باشید بازهم نمیتونید یکی از این وظایف رو بدید به دوستتون و بگید فرضا تا موقعی که من میرم پیش اقای A تو برو پیش خانم B و کارم رو انجام بده ( چرا که برای انجام کار پیش خانم B باید نامه ای که اقای A میده رو داشته باشید ) !!



مثال دوم : درست کردن ماکارونی به صورت synchronous

فرض کنید میخواید ماکارونی درست کنید . توی اینترنت سرچ میکنید و متوجه میشید که شامل این مراحله :

  • جوش آوردن آب
  • پختن ماکارونی
  • درست کردن مایع ماکارونی
  • مخلوط کردن ماکارونی و مایع و دم کشیدن

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

توی این مثال دیدیم که یه تسک که sequential بود و ترتیب داشت رو تونستیم یکسری از این ساب-تسک ها رو به صورت همزمان انجام بدیم ( جوش آمدن آب و درست کردن مایع ماکارونی‌ )

نتیجه ی مهمی که میشه گرفت اینه که بین مورد اول و دوم (‌ sequential & synchronized ) تناقضی وجود نداره . یعنی اینکه یه برنامه میتونه در عین sequential بودن، synchronous هم باشه . توی مثال درست کردن ماکارونی هم دیدیم که ذات درست کردن ماکارونی sequential هست و برای انجام تسک ها ترتیب داریم اما در عین حال میتونیم بعضی از این sub-task ها رو بصورت همزمان انجام بدیم اما در نهایت بین بعضی از تسک ها وابستگی وجود داره



مثال سوم : کارمند ها باهم asynchonous کار میکنند

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

برنامه های asynchronous هم دارای همچین ویژگی ای هستند و ساب-تسک ها به اصطلاح independent هستند و سوای از هم میتونن به صورت همزمان روی چند thread مختلف اجرا بشن .


امیدوارم که این سه مثال تونسته باشه تفاوت بینشون رو براتون واضح کرده باشه . توی پست بعدی قراره تفاوتشون رو دقیق تر و توی دنیای برنامه نویسی و کد بررسی کنیم .

همزمانیasynchronoussynchronousconcurrency
مینویسم، پس هستم
شاید از این پست‌ها خوشتان بیاید