اگر بخوام این موضوع رو ساده و کاربردی بیان کنم، باید بگم که Asynchronous در اصل به موازی بودن و یا غیر همزمان بودن اشاره داره. در حالت معمول وقتی شما یک تکه کد مینویسید، به صورت خطی اجرا میشه. برنامه به ترتیب از خطوط ابتدایی به انتهایی ادامه پیدا میکنه. اگر در یکی از این خطوط نیاز به محاسبه باشه، برنامه منتظر میمونه تا محاسبه تمام بشه و بعد از اون ادامه کد خونده میشه. به این میگن synchronous.
حالا Asynchronous خلاف این قاعدهست. یعنی میشه سناریویی رو پیادهسازی کرد که برنامه به این ترتیب اجرا بشه: خط اول، خط دوم، خط دهم، خط یازدهم، خط سوم، خط چهارم و...
اما این کجا میتونه کاربرد داشته باشه؟
ببینید اصولا برای برنامههای کوچیک زیاد به چشم نمیاد، اما برای برنامههایی که کاربران متعددی از اون استفاده میکنند، یک روش مقرون به صرفه استفاده از Asynchronous هست. مثلا تصور کنید یک وبسایت در یک لحظه صد کاربر آنلاین داره. برای پوشش دادن درخواستهای این کاربران (مثلا دیدن فلان پست از وبسایت یا نظر دادن و یا...) احتمالا به هزاران درخواست از دیتابیس نیاز داریم. مثلا برنامه به دیتابیس درخواست میده که اطلاعات فلان پست رو برای فلان کاربر برگردونه. اگر فرض رو بر این بگیریم که برای هر درخواست از دیتابیس نیاز به یک دهم ثانیه زمان باشه، در حالت synchronous نیاز هست که برنامه دقایق زیادی رو منتظر باقی بمونه. به این ترتیب احتمالا باز کردن وبسایت مذکور چند دقیقه طول میکشه!
اما در برنامهنویسی Asynchronous ما میایم این کار رو به صورت موازی انجام میدیم. درخواست رو به دیتابیس ارسال میکنیم و بهش میگیم که کاری نداریم که چقدر طول میکشه و هر وقت که درخواست ما تکمیل شد نتیجه رو واسمون ارسال کن. اینطوری میتونیم بیتوجه به نتیجهای که از درخواستهای قبلی حاصل شده (یا نشده) به ادامه برنامه بدون انتظار بپردازیم.
قدرت Asynchronous رو میتونید در زبانهایی از جمله جاواسکریپت امتحان کنید.