تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

Synchronous و Asynchronous چیست؟


۲۲ تیر ۱۳۹۹

درک تفاوت میان اجرای هم‌زمان (Synchronous) و ناهم‌زمان (Asynchronous) در برنامه‌نویسی، صرفاً یک تمایز فنی نیست، بلکه یک اصل بنیادین در طراحی و معماری نرم‌افزار است. انتخاب بین این دو شیوه اجرا، بر تجربه کاربر، مصرف منابع، بهره‌وری سیستم و حتی مقیاس‌پذیری نهایی یک برنامه اثر می‌گذارد. هرچند ممکن است این مفاهیم در ظاهر ساده به نظر برسند، اما سوءتفاهم‌هایی که در برداشت عمومی از آن‌ها وجود دارد—مانند تفسیر نادرست واژه “هم‌زمان”—می‌تواند منجر به انتخاب‌های اشتباه در طراحی سیستم شود. این مقاله تلاش می‌کند با روشن‌سازی دقیق معنای واقعی و کاربردی Synchronous و Asynchronous، زمینه‌ای روشن برای تحلیل و تصمیم‌گیری مهندسی فراهم آورد.

در ادامه خواهید خواند:

  • اجرا عملیات به صورت 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----->| 
برنامه‌نویسی PHP با مدل Asynchronous (نامتقارن؛ غیرهمزمان)
برنامه‌نویسی PHP با مدل Asynchronous

اجرا عملیات به صورت 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--------->|

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

اپلیکیشن Node.js خود را در کمترین زمان، روی هاستی سریع و بهینه اجرا کنید.
✅ پشتیبانی کامل از Node.js و npm✅ دیپلوی آسان با Git، CLI یا FTP✅ منابع اختصاصی و عملکرد پایدار
خرید و راه‌اندازی هاست Node.js

درک تفاوت اجرای هماهنگ و ناهم‌زمان با یک مثال ساده

درک مفاهیم فنی مثل Synchronous و Asynchronous گاهی بدون یک تصویر ذهنی ملموس دشوار است. برای همین، استفاده از مثال‌های روزمره می‌تواند در فهم بهتر این مفاهیم بسیار کمک‌کننده باشد. در ادامه، دو مثال ساده و قابل لمس از زندگی واقعی آورده‌ایم که می‌توانند نحوه عملکرد اجرای هماهنگ (Synchronous) و ناهم‌زمان (Asynchronous) را به‌خوبی نشان دهند.

Synchronous

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

Asynchronous

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

10 الگوی طراحی برتر Node.js برای ساخت اپلیکیشن‌های مقیاس‌پذیر
10 الگوی طراحی برتر Node.js

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

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

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

اجرای حرفه‌ای اپلیکیشن‌های Python با هاستی سریع، پایدار و سازگار با نیاز شما.
✅ پشتیبانی کامل از Django، Flask و FastAPI✅ دیپلوی آسان با Git یا CLI✅ منابع اختصاصی و عملکرد بهینه
خرید و راه‌اندازی هاست Python

جمع بندی

Synchronous و Asynchronous صرفاً دو واژه نیستند که شیوه اجرای عملیات را توضیح دهند، بلکه بیانگر دو نگرش کاملاً متفاوت نسبت به زمان‌بندی، تعامل بین عملیات، و وابستگی آن‌ها به منابع پردازشی هستند. در اجرای Synchronous، عملیات در دنباله‌ای منظم و وابسته اجرا می‌شوند که در آن، هر مرحله منتظر اتمام مرحله قبلی می‌ماند. در مقابل، Asynchronous امکان اجرای هم‌پوشان و مستقل عملیات را فراهم می‌کند که به‌ویژه در محیط‌های نیازمند پاسخ‌گویی بالا یا پردازش موازی مزیت دارد.

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

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

به اشتراک بگذارید