Asynchronous چیست؟

دسته بندی: ساختمان داده
سطح مقاله: ساده
زمان مطالعه: 8 دقیقه
۰۴ مهر ۱۳۹۸
فارسی
ناهمگام
English
Asynchronous

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

فهرست محتوای این مقاله

برنامه نویسی Synchronous چیست؟

برنامه نویسی Synchronous چیست؟

برای درک مفهوم برنامه نویسی غیرهمزمان بهتر است اول برنامه نویسی همگام یا Synchronous را بشناسیم. در این روش کدهای برنامه نویس پشت سر هم و به صورت خطی اجرا می شوند. یعنی اگر برنامه ما 400 خط کد داشته باشد، دستورات و توابع از خط 1 و به نوبت اجرا می شوند تا زمانی که به خط 400 برسیم و اجرای برنامه تمام شود. در این روش از برنامه نویسی دستورات باید به ترتیب اجرا شوند و تا زمانی که تابع "الف" اجرا نشده نمی توان سراغ تابع "ب" رفت.

گفتن چند نکته به شما کمک می کند بیشتر با این نوع از برنامه نویسی آشنا شوید. اولین مورد درباره ترجمه کلمه Synchronous به فارسی بوده که کمی گمراه کننده است. با جستجو در چند دیکشنری معتبر به چنین نتایجی می رسیم: Synchronous: هم زمان، همگاه، واقع شونده بطور هم زمان. می بینید که تمام این کلمات اشاره به مفهومی به نام "زمان" دارند. ولی در این روش همه چیز به زمان خلاصه نشده و لزوما نباید همه چیز را در در زمان خلاصه کنیم. بلکه منظور از Synchronous این است که کدها پشت سر هم اجرا می شوند که این مورد می تواند به موارد دیگری به جز زمان هم وابسته باشد. پس مراقب باشید ترجمه این کلمه شما را گمراه نکند.

نکته دیگر مربوط به خوب بودن یا بد بودن این روش است. نباید اینطور فکر کنیم که با روی کار آمدن Asynchronous دیگر فاتحه Synchronous خوانده شده و باید استفاده از آن را کنار بگذاریم. در کل نمی توان به یک تکنولوژی برچسب خوب یا بد زد. باید ببینیم این تکنولوژی کجا کاربرد دارد و چه قابلیت هایی دارد. در روش Synchronous هم اوضاع به همین شکل بوده و اگر در جای درست استفاده شود نتایج شگفت انگیزی به دنبال خواهد داشت.

چند مثال در روش برنامه نویسی Synchronous

مثال های زیادی برای برنامه نویسی همگام وجود دارند. در واقع بسیاری از برنامه نویسان آگاهانه یا ناآگاهانه در حال استفاده از این روش هستند. اما برای آشنایی بیشتر بهتر است چند سناریو را با هم بررسی کنیم. در یک مثال ساده تکه کدی به زبان Python می نویسیم که یک ورودی از کاربر گرفته و آن را در صفحه نمایش چاپ کند:

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

متوجه ایراد کار شدید؟ در واقع تا زمانی که دانلود فایل ها تمام نشده باشد برنامه نمی تواند تغییرات خودش را اعمال کند. اگر روشی وجود داشت که برنامه با دانلود بخشی از فایل آن را پردازش هم بکند چقدر در عملکرد برنامه تاثیر مثبتی داشت. یا هنگامی که برنامه در حال دانلود فایل ها است بتوانیم توابع دیگر برنامه را اجرا کنیم. دقیقا به خاطر همین موارد و همین مزایا است که سراغ برنامه نویسی Asynchronous می رویم.

برنامه نویسی Asynchronous چیست؟

برنامه نویسی Asynchronous چیست؟

برنامه نویسی Asynchronous (ناهمگام یا نامتقارن) یک مدل و مفهوم در برنامه نویسی است. در این مدل برخلاف روش Synchronous کدهای ما پشت سر هم اجرا نمی شوند و به اصطلاح ترتیب کدها غیرخطی است. حالا دیگر اجباری نیست که برنامه 400 خطی ما به ترتیب از خط 1 تا 400 اجرا شود و این روال می تواند تغییر کند. یا مثالی که درباره دانلود و پردازش فایل ها زدیم را هم می توانیم به کمک Asynchronous بهتر پیاده سازی کنیم. به این شکل که تا فایل ها در حال دانلود هستند، CPU را به بخش های دیگر اختصاص بدهیم. پس در Asynchronous ترتیب اجرای دستورات پشت سر هم نیست. اما چه دلیلی دارد که ترتیب اجرای کدها را در برنامه به هم بریزیم؟

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

Asynchronous می تواند بسیاری از مشکلات ما را حل کند. این روش از لحاظ ترتیب اجرا کاملا در نقطه مقابل Synchronous قرار دارد و ما در یک برنامه می توانیم چندین جریان اجرایی یا Control Flow داشته باشیم. Asynchronous کمی شبیه به حل پازل است. همانطور که ما هنگام چیدن پازل از ترتیب خطی استفاده نکرده و با توجه به شرایط مختلف قطعات پازل را کنار هم می چینیم، در روش Asynchronous هم پردازش ها با ترتیب مشخصی اجرا نمی شوند.

آیا برنامه نویسی Asynchronous حتما سرعت برنامه ما را افزایش می دهد؟

هیچ تضمینی وجود ندارد که استفاده از چند Control Flow و خارج کردن برنامه از حالت خطی و ترتیبی سرعت اجرای برنامه شما را افزایش دهد. در واقع این مدل اجرایی گاهی تاثیری در سرعت برنامه نداشته و حتی ممکن است در بعضی از موارد سرعت برنامه را کاهش هم بدهد. اگر به خاطر افزایش سرعت اجرا تصمیم گرفته اید از Asynchronous استفاده کنید باید یک تجدید نظر در تصمیم خود داشته باشید. اگر این تکنولوژی در جای مناسب به کار بگیرید می تواند نتایج بسیار خوبی به دنبال داشته باشد. در واقع هر بار که کد می نویسید باید از خودتان این سوال را بپرسید که استفاده از Asynchronous مفید خواهد بود یا خیر. مثلا می توانید بپرسید بهتر است در این قسمت از برنامه وقتی در حال خواندن فایلی هستم باید در پشت صحنه یک پردازش هم اجرا کنم یا خیر. اگر جواب مثبت بود استفاده از Asynchronous می تواند کمک بزرگی به حساب بیاید.

آیا مدل Asynchronous وابسته به یک زبان برنامه نویسی یا فریم ورک خاص است؟

مدل Asynchronous وابسته به زبان خاصی است؟

Asynchronous به تنهایی یک مفهوم است. بهتر است زمانی که در حال بررسی تئوریک آن هستیم وارد مباحث برنامه نویسی نشویم. زمانی که به خوبی این مدل را درک کردیم می توانیم هنگام کدنویسی از آن استفاده کنیم. زبان های برنامه نویسی روش های متنوعی برای پیاده کردن این مدل ارائه دادند که با توجه به زبانی که استفاده می کنیم ممکن است کمی متفاوت باشند. مثلا در زبان C# و بعد از تکنولوژی .NET Framework نسخه 4.5 به بعد دو کلیدواژه Async و Await معرفی شدند و کار پردازش نامتقارن داده ها را به عهده گرفتند. فراموش نکنید که عملیات Asynchronous محدود به دات نت فریم ورک و زبان برنامه نویسی سی شارپ نبوده و می توان از آن در بخش های مختلفی استفاده کرد.

نتیجه گیری

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

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

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :

 
گزارش مشکل