shahrzad jahanbaz
shahrzad jahanbaz
خواندن ۴ دقیقه·۵ سال پیش

درک Asynchronous Programming در #C (اولین قسمت : درک تفاوت synchronous و asynchronous)

اولین نکته ای که خیلی مهم و به جاست که همین اول کار راجع بهش صحبت کنیم اینه که Asynchronous Programming چی نیست و چی کار نمی کنه ! اولین باور اشتباهی که معمولا خیلی دیده میشه اینه که استفاده از Asynchronous Programming باید performance کدمون رو بالا ببره! که اصلا لزوما اینطور نیست (شاید هم بشه ها ولی الزاما هدف ما این نیست) یعنی دغدغه ی ما توی این مفهوم، اصلا سرعت نیست . چیزی که Asynchronous Programming به کد ما می بخشه اینه که در نهایت ما نسبت به حالت synchronous، تعداد request بیشتری را می تونیم در یک زمان مشابه با منابع (resource ) مشابه مدیریت کنیم.

-مثال می زنم تا یه کمی قضیه واضح تر بشه:

فرض کنید یه رستوران داریم که طبق سیستم روتین همه رستوران ها، وقتی سفارش ها از مشتریان گرفته میشه ، میره آشپزخونه تا توسط آشپز ها آماده بشوند. خب اینجا بیاید اینطوری فرض کنیم که دو نوع آشپزخونه داریم : synchronous و asynchronous .

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

مثلا این آشپزخونه مونه :)
مثلا این آشپزخونه مونه :)


توی آشپزخونه دوم که asynchronous است اما اصلا اوضاع این شکلی نیست، اصلا فرض کنید این یکی آَشپزخونه شعارش اینه : "no idle time" (تایم بیکاری نداریم!) مثلا اگر یه آشپزی توی این آشپزخونه یه سفارشی رو قبول کنه و شروع کنه به آماده کردن ش، و مثلا وسط ش نیاز باشه که اون غذا بره داخل فر، اون آشپز حق نداره بیکار باشه، باید توی این تایم بره یه کار دیگه ای انجام بده.

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

دقیقا می رسیم به همون جمله ای که اولش گفتیم که با یه مقدار مشخص و یکسانی از منابع (resource) که اینجا آشپزها هستند که توی دو تا رستوران برابرند و در یک زمان یکسان، با استفاده از پیاده سازی Asynchronous تونستیم میزان request بیشتری رو مدیریت کنیم.(request اینجا تعداد سفارش ها است.)

پس تا اینجا نکته ای که باید توی ذهن مون نگه داریم اینه که هدف اصلی asynchronous programming توی asp.net افزایش throughput یا همون بهره وری است . ( که توی مثال رستوران میشه تعداد سفارش هایی که هر رستوران می تونه آماده کنه! )

توی قسمت های بعدی راجع به تفاوت این مفهوم با MultiThreading صحبت می کنم.

Asynchronous ProgrammingASP.NET#Cبرنامه نویسیsynchronous
برنامه نویس و عاشق توسعه دادن هر چیزی که بشه توسعه ش داد چه کد باشه چه زندگی :)
شاید از این پست‌ها خوشتان بیاید