Synchronous و Asynchronous چیست؟


۲۲ تیر ۱۳۹۹
synchronous و asynchronous چیست؟

اجرا عملیات به صورت Synchronous:

Synchronous به معنی متصل و یا وابسته به هم است. وقتی شما عملیاتی را به صورت Synchronous اجرا می‌کنید، منتظر می‌مانید تا این عملیات تمام شود سپس می‌توانید عملیات دیگری را انجام دهید.

به عبارت دیگر، Synchronous به این معنی است که اجرا عملیات در یک دنباله اتفاق می‌افتد. مثال:

A -> B -> C -> D

در این مثال ابتدا عملیات A آغاز می‌شود و بعد از پایان آن B. به همین طریق بعد از پایان عملیات B، عملیات C آغاز می‌شود و به همین شیوه تا انتها پیش می‌رود. اجرا عملیات به صورت Synchronous به نقطه آغاز و پایان ۲ و یا تعداد بیشتری عملیات اشاره می‌کند و نه اجرای آن‌ها. در این مثال نقطه پایان عملیات A با نقطه آغاز عملیات B همزمان است:

SYNCHRONOUS
  |--------A--------|
                    |--------B--------|

وقتی عملیات به صورت Synchronous اجرا می‌شود، شما منتظر می‌مانید تا اجرای یک عملیات تمام شود تا بتوانید عملیات دیگری را آغاز کنید. اجرای یک عملیات به اتمام عملیات قبلی وابسته است.

مثال زیر اجرای عملیات به صورت Synchronous و در یک thread است:

1 thread ->   |<---A---->||<----B---------->||<------C----->|

مثال دیگری از اجرای عملیات به صورت Synchronous اما توسط چندین thread است:

thread A -> |<---A---->|  
                       \ 
thread B ------------>   ->|<----B---------->|  
                                             \ 
thread C ---------------------------------->   ->|<------C----->| 

اجرا عملیات به صورت Asynchronous:

زمانی که شما عملیاتی را به صورت Asynchronous اجرا می‌کنید، می‌توانید عملیات دیگری را اجرا کنید قبل از اینکه اجرا عملیات قبلی تمام شود. در پردازش و یا اجرا عملیات به صورت Asynchronous، نقطه آغاز و پایان اجرای عملیات با هم همزمان نیست:

ASYNCHRONOUS
  |--------A--------|
        |--------B--------|

در مثال بالا اجرای عملیات A با اجرای عملیات B هم‌پوشانی دارد. در واقع این دو عملیات با هم و یا در کنار هم و همزمان اجرا می‌شوند. وقتی عملیاتی به صورت Asynchronous اجرا می‌شود شما می‌توانید عملیات دیگری را اجرا کنید بدون اینکه لازم باشد تا اجرا عملیات قبلی به پایان برسد. به عبارت دیگر عملیات به یکدیگر وابسته و یا متصل نیستند.

در دنیای برنامه‌نویسی عملیات و یا task‌ها بر روی thread اجرا می‌شوند. مهم است تا بفهمیم می‌توان چندین thread ایجاد کرد تا از انباشته شدن عملیات در یک صف جلوگیری کرد.

همانطور که گفته شد مفهوم Synchronous و Asynchronous با thread‌ها چندان کاری ندارد و دلیلش هم این است که اجرای یک عملیات به صورت Asynchronous بر روی یک thread بسیار نادر و کم است (گرچه از نظر فنی امکان پذیر است).

اجرای عملیات به صورت Asynchronous بر روی یک thread:

اجرای عملیات به صورت asynchronous بر روی یک thread

اجرای عملیات به صورت Asynchronous بر روی چندین thread:

thread A ->     |<---A---->|
thread B ----->     |<----B---------->|
thread C --------->     |<------C--------->|

نقطه آغاز و پایان اجرای عملیات با > و < نشان داده شده است.

به بیان ساده‌تر:

Synchronous:

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

Asynchronous:

شما در یک رستوران هستید در حالی که مشتریان دیگری نیز در آنجا هستند تا همانند شما غذا میل کنند. حالا غذای خود را به مهماندار رستوران سفارش می‌دهید. در حالی که سایرین هم می‌توانند غذای خودشان را سفارش دهند. اما آن‌ها مجبور نیستند منتظر بمانند که سفارش شما پخت و سرو شود تا بتوانند سفارش خودشان را ثبت کنند. در آشپزخانه رستوران به صورت مداوم در حال پخت و سرو و دریافت سفارش‌های جدید هستند. مشتریان به محض اینکه سفارش‌شان پخته شود، آن را تحویل می‌گیرند.

اشتباه متداول:

وقتی شما به لغتنامه نگاه کنید شاید گیج شوید و این سوال را از خودتان بپرسید چیزی که باعث سردرگمی من می‌شود این است که:

“چگونه ممکن است Synchronous به معنی همزمان باشد در حالی که در اینجا به معنی انجام عملیات یکی پس از دیگری است و نه به صورت همزمان. همچنین Asynchronous به معنی غیر همزمان است در حالی که در اینجا عملیات در کنار هم و همزمان انجام می‌شوند؟”
شاید عجیب باشد اما Synchronous یعنی استفاده از یک clock cpu یکسان و زمانی که ۲ دستورالعمل و یا عملیات به صورت Synchronous هستند، آن‌ها از یک clock cpu یکسان استفاده می‌کنند و پشت سر هم و یکی پس از دیگری اجرا می‌شوند. Asynchronous یعنی عدم استفاده از یک clock یکسان و دستورالعمل‌ها به یکدیگر متصل نیستند. در واقع مفهوم Synchronous و Asynchronous به رابطه دستورالعمل‌ها و یا عملیات به یکدیگر اشاره نمی‌کند بلکه به رابطه آن‌ها با clock cpu اشاره می‌کند.

منبع: https://medium.com/from-the-scratch/wtf-is-synchronous-and-asynchronous-1a75afd039df

برچسب‌ها:

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید و فقط برای بیش از آن هزینه پرداخت کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

توسعه‌دهندگان درباره‌ی ما چه می‌گویند

تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...

MohammadReza
liara testimonial
keikaavousi

بعد از بسته شدن @fandoghpaas و ناراحتی همه‌مون از اینکه یه سرویس خوب و صادق نمی‌تونه از پس هزینه‌ها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوت‌هایی داشت که کمی کار می‌خواست ولی تا الان کاملا راضی.

jadi
liara testimonial
jadi

یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.

Arch
liara testimonial
EbadiDev

واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیت‌های سرویس دیتابیس‌شون اینه که خودشون به صورت دوره‌ای بکآپ میگیرن.
...

Ali Najafi
liara testimonial
me_ali_najafi

یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@

Navid
liara testimonial
1navid

عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم

Amir H Shekari
liara testimonial
vanenshi

همراه شما هستیم

در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
تلفن واحد فروش:
۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)