30 مرداد 1404
تفاوت برنامهنویسی سینکرونوس (Synchronous) و آسینکرونوس (Asynchronous)

یکی از مفاهیم مهم در دنیای برنامهنویسی، درک درست تفاوت بین سینکرونوس و آسینکرونوس است. این مفاهیم مخصوصاً در زبانهایی مثل جاوااسکریپت، پایتون و … کاربرد زیادی دارند. در این مقاله قصد داریم این دو مفهوم را بررسی کنیم و با مثال ساده آنها را توضیح دهیم.
۱. برنامهنویسی سینکرونوس (Synchronous) چیست؟
در مدل سینکرونوس، دستورات برنامه به ترتیب و یکی پس از دیگری اجرا میشوند.
یعنی اگر سه تابع داشته باشیم:
-
تابع
f1()
-
تابع
f2()
-
تابع
f3()
ابتدا f1
اجرا میشود. تا زمانی که اجرای آن کامل نشده، پردازنده به سراغ f2
نمیرود. بعد از تمام شدن f1
، نوبت به f2
میرسد، و در نهایت f3
اجرا خواهد شد.
این یعنی در Synchronous Execution، پردازشها به ترتیب خطی انجام میشوند و اگر یکی از آنها زمان زیادی برای اجرا نیاز داشته باشد، سایر بخشهای برنامه متوقف میمانند.
🔒 به این حالت میتوان گفت که CPU «لاک» میشود تا دستور قبلی تمام شود.
مثال ساده
فرض کنید به یک کافیشاپ رفتهاید. شما قهوه سفارش میدهید، پشت صندوق میایستید تا قهوه آماده شود، بعد از آماده شدن قهوه، نوبت مشتری بعدی میشود. این همان مدل سینکرونوس است.
۲. برنامهنویسی آسینکرونوس (Asynchronous) چیست؟
در مدل آسینکرونوس، دستورات به صورت مستقل از هم اجرا میشوند و برنامه منتظر اتمام دستور قبلی نمیماند.
در همان مثال سه تابع:
-
f1()
شروع به اجرا میکند. -
بدون اینکه منتظر بمانیم تا
f1
تمام شود،f2()
هم اجرا میشود. -
سپس
f3()
هم شروع میشود.
اینجا دیگر CPU قفل نمیشود، چون اجرای دستورات میتواند بهصورت موازی مدیریت شود.
مثال ساده
همان کافیشاپ را تصور کنید. شما قهوه سفارش میدهید و شماره سفارش میگیرید. بعد کنار میروید تا سفارش آماده شود. در همین حین مشتریهای دیگر هم میتوانند سفارش بدهند. وقتی قهوه شما آماده شد، صدا زده میشوید تا آن را تحویل بگیرید. این همان مدل آسینکرونوس است.
۳. اشتباه رایج در ترجمه: همزمان و غیرهمزمان
خیلی وقتها برای ترجمهی این دو واژه، از عبارتهای «همزمان» (برای Synchronous) و «غیرهمزمان» (برای Asynchronous) استفاده میشود. اما این ترجمه ممکن است کمی گمراهکننده باشد.
🔹 در واقع، در مدل سینکرونوس همه دستورات در یک زمانبندی خطی اجرا میشوند (یکی پس از دیگری).
🔹 در مدل آسینکرونوس، دستورات به صورت غیرخطی و نامتقارن اجرا میشوند و CPU میتواند چندین کار را بدون قفل شدن مدیریت کند.
به همین دلیل برخی منابع بهجای همزمان/غیرهمزمان از اصطلاحات متقارن / نامتقارن یا یکپارچه / غیر یکپارچه استفاده میکنند.
۴. چرا آسینکرونوس اهمیت دارد؟
در معماریهای مدرن نرمافزاری (مثل Node.js در جاوااسکریپت)، استفاده از Asynchronous Programming بسیار رایج است. دلیل آن هم روشن است:
-
در مدل سینکرونوس، اگر یک تابع زمان زیادی برای اجرا نیاز داشته باشد (مثلاً درخواست به یک API خارجی یا خواندن یک فایل بزرگ از دیسک)، کل برنامه متوقف میشود.
-
اما در مدل آسینکرونوس، برنامه میتواند آن عملیات را در پسزمینه انجام دهد و همزمان سایر کارها را ادامه دهد.
✅ این باعث میشود نرمافزار سریعتر، روانتر و کارآمدتر عمل کند.
۵. جمعبندی
-
Synchronous → اجرای دستورات پشت سر هم، هر تابع منتظر اتمام قبلی است، CPU لاک میشود.
-
Asynchronous → اجرای دستورات بدون توقف برای دیگری، CPU قفل نمیشود، برنامه روانتر اجرا میشود.
-
درک درست این دو مفهوم به شما کمک میکند تا برنامههای مقیاسپذیرتر و بهینهتری بنویسید.