آموزش Async در سیشارپ 5 - بخش اول
شنبه, ۲۴ اسفند ۱۳۹۲، ۰۶:۱۶ ب.ظ
دلایل استفاده ناهمگامی (Asynchrony)
هنگامی که یکسری عملیات به ترتیب و پشتسر هم انجام شوند، به عبارتی، هنگامی که هر عمل بعد از پایان عمل قبلی اجرا شود، میگوییم روند اجرای آنها همگام یا Synchronous است. حال اگر شرایط را فراهم کنیم که عملیات مختلف بتوانند بدون انتظار برای پایان دیگر عملیات، شروع به کار کنند (موازی یا همروند)، روند اجرای آنها را ناهمگام یا Asynchronous گوییم. البته این تعریف دقیق نیست و تنها برای ایجاد تصویری مناسب از Asynchrony نوشته شده است. در ادامه به طور خلاصه به چندتا از فواید ناهمگامی اشاره میکنم.
1. رابط کاربری (UI)
معروفترین ابزارهای ایجاد رابطهای کاربری در سیشارپ، Windows Form و WPF هستند. در هر دو تکنولوژی، برای مدیریت رابط کاربری (نمایش اجزا، رخدادها و ...) تنها از یک Thread* استفاده میشود. اکنون فرض کنید برنامهی شما قرار است به عنوان مثال بعد از کلیک بر روی یک دکمه، عملیاتی طولانی را شروع کند (محاسبات پیچیده، درخواستهای تحت شبکه، ورودی/خروجی دیسک و ...). با توجه به اینکه در خواست اجرا از طریق رابط کاربری بوده است و در آنجا تنها یک Thread وجود دارد، این عملیات، مدت زمان طولانی Thread مخصوص رابط کاربری را Block میکنند و در نتیجه رابط کاربری تا پایان عملیات، توانایی پاسخگویی به کاربر را نخواهد داشت. درست است که عملیات مورد نظر در حال انجام است اما کاربر هیچگاه رابط کاربری از کار افتاده یا Unresponsive را نمیپسندد. بهتر است عملیات طولانی در Thread دیگر، موازی با رابط کاربری اجرا شود تا رابط کاربری همواره پاسخگوی کاربر باشد و به نحوی میزان پیشرفت عملیات طولانی را نیز نمایش دهد.
2. استفاده از اوقات بیکاری CPU
گاهی اوقات در برنامهها اعمالی وجود دارند که CPU را درگیر نمیکنند (مثل ورودی/خروجی دیسک)، یعنی CPU کار را به واحد دیگر میسپارد و منتظر میماند تا آن واحد عملیات مورد نظر را انجام دهد. سپس دوباره به روند اجرای برنامهی اصلی باز میگردد. از طرفی اعمالی که واحدهای دیگر انجام میدهند، معمولا طولانی و کند هستند و در نتیجه CPU مدت زمان زیادی را بیکار میماند (البته منظور از بیکار بودن اینه که توی اون مدت با برنامهی شما کاری نداره). اگر بتوانیم در این زمان عملیات قسمت دیگری از برنامه را تحویل CPU دهیم، توانستهایم بیشترین استفاده را از CPU ببریم. این مسئله نیز با Asynchrony قابل حل است.
3. استفاده از حداکثر توان پردازشی
سختافزارهایی که امروزه راهی بازار میشوند، بسیار قدرتمندتر از آنی هستند که ما (با برنامههای معمولی البته) از آنها استفاده میکنیم. قلب کامپیوتر یعنی CPU هم از این قضیه مستثنا نیست. CPUهای فعلی حداقل 2 هستهی پردازشی دارند. هستهها میتوانند قابلیت پردازش موازی و افزایش سرعت برنامه را فراهم کنند. در صورتی که برنامهی شما موازی نباشد، شما تنها از یک هسته CPU استفاده میکنید (برای امتحان کافیست برنامهای بنویسید که یک حلقهی طولانی داشته باشد، آن را اجرا کنید و سپس از طریق Task Manager، میزان استفاده از CPU را چک کنید). قابلیت Async در سیشارپ امکان استفاده از همهی هستههای پردازشی را به شما میدهد.
*مبحث Threadها در این سری آموزشی باز نخواهد شد. برای درک بهتر مفاهیم آموزشی، پیشنهاد میکنم از منابع دیگر در مورد Threadها مطالعه کنید.
منتظر بخش های بعدی هستیم ...