نمایش نتایج 1 تا 6 از 6

نام تاپیک: چه وقت باید از async و await استفاده کرد ؟

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    تهران
    پست
    196

    چه وقت باید از async و await استفاده کرد ؟

    سلام ،
    چند تا سوال دارم در این مورد . واقعا گیجم کرده چند تا مقاله خوندم ولی به نتیجه نرسیدم.

    1- کی باید از async و await در mvc استفاده کرد ؟

    2- مزیتش چیه ؟

    3-استفاده ناصحیح ازش باعث می شه چه اتفاقی بیفته ؟ (چون یه سریا رو دیدم که مثلا تو لایه سرویس ازش استفاده می کنند ولی وقتی می پرسی برای چی جواب درستی نمی دن و یا نمی دونن چرا استفاده می کنن)

  2. #2
    کاربر دائمی آواتار salar IT man
    تاریخ عضویت
    بهمن 1392
    محل زندگی
    ارومیه-صمدزاده
    پست
    261

    نقل قول: چه وقت باید از async و await استفاده کرد ؟

    یه سری به این مقاله بزنید.

    این هم خوب است ؛ البته تفاوت مدیریت درخواست ها به صورت همزمان و نا همزمان بیشتر مد نظر است در این مقاله.

  3. #3

    نقل قول: چه وقت باید از async و await استفاده کرد ؟

    اگه ساده بگیم سایتی که با ASP طراحی میشه روی IIS کار میکنه. فرض کنید این IIS مثل یک ایستگاه قطار باشه. و هر درخواست یک قطار. که باید مسافرشو خالی کنه و مسافر جدید سوار کنه و بره و نوبت قطار بعدی برسه.

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

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

    به طور کلی وقتی کاری زیاد طول نمیکشه نیازی به استفاده از Async ندارید. کارها خیلی وقتها سریع انجام میشوند و موازی سازی خودش برای سیستم هزینه هایی داره. ولی وقتی که درخواست ممکنه طولانی باشه باید از این روش استفاده کرد.

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

    کلا وقتی کاری ممکنه زیاد طول بکشه از Async استفاده کنید. استفاده از وب سرویس های بیرونی یا کار با فایل و عملیات محاسباتی و ...

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    تهران
    پست
    196

    نقل قول: چه وقت باید از async و await استفاده کرد ؟

    نقل قول نوشته شده توسط hakim22 مشاهده تاپیک
    اگه ساده بگیم سایتی که با ASP طراحی میشه روی IIS کار میکنه. فرض کنید این IIS مثل یک ایستگاه قطار باشه. و هر درخواست یک قطار. که باید مسافرشو خالی کنه و مسافر جدید سوار کنه و بره و نوبت قطار بعدی برسه.

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

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

    به طور کلی وقتی کاری زیاد طول نمیکشه نیازی به استفاده از Async ندارید. کارها خیلی وقتها سریع انجام میشوند و موازی سازی خودش برای سیستم هزینه هایی داره. ولی وقتی که درخواست ممکنه طولانی باشه باید از این روش استفاده کرد.

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

    کلا وقتی کاری ممکنه زیاد طول بکشه از Async استفاده کنید. استفاده از وب سرویس های بیرونی یا کار با فایل و عملیات محاسباتی و ...
    ممنون از شما
    شما مثال پیامک رو زدین حالا من می گم اگر مثلا عملیات خوندن یه سری رکورد از دیتابیس رو در نظر بگیریم اگر 1000 کاربر همزمان این درخواست رو به سرور ارسال کنند این 1000 درخواست دریک صف قرار می گیره یکی یکی اجرا می شه درسته ؟ حالا اگر این عملیات به صورت async تعریف بشه هر کدوم از این درخواست ها در یک ترد انجام می شه درسته ؟
    حالا سوال اینجاست این ترد های اضافی که ایجاد شده و ممکنه با بالارفتن تعداد کاربران در یک لحظه بیشتر هم بشه مشکلی پیش نمیاره ؟ چطور می شه این ها رو مدیریت کرد ؟ یا خود iis این کار رو انجام می ده ؟
    آخرین ویرایش به وسیله mf_007 : دوشنبه 05 بهمن 1394 در 01:41 صبح

  5. #5

    نقل قول: چه وقت باید از async و await استفاده کرد ؟

    اینجوری نیست که برای هر درخواست یک Thread ایجاد بشه. فقط تضمین نمیشه که Thread که درخواست رو دریافت کرده پاسخ رو ارسال کنه. اینکه هر Thread یک درخواست رو مدیریت کنه روش قدیمی تری هست که کارایی کمتری هم داره. الان در IIS یک Application Pool هست و در واقع استخری از Thread ها در اختیار وب سایت قرار میگیره. مدیریت دقیقش با IIS هست.

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

    پیشنهاد من این است که شما سایت هارو کاملا بر پایه ی Sync پیاده کنید مگر اینکه جایی مطمئن باشید باید از Async استفاده کنید. در سرورهای اشتراکی Async اثری نداره. باید یک پردازنده ی چند هسته ای داشته باشید که اثر واقعی نشون داده بشه.(هر هسته تبدیل به یک ایستگاه جدا میشه)سایت های با بازدید چند هزار در روز هم از Async بودن نفع زیادی نمی برند. هم بازدید باید بالا باشد و هم عملی که در سرور انجام میشود باید سنگین باشد که Async به کار بیاد .

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

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مهر 1390
    محل زندگی
    rayancode.ir
    پست
    1,559

    نقل قول: چه وقت باید از async و await استفاده کرد ؟

    نقل قول نوشته شده توسط mf_007 مشاهده تاپیک
    ممنون از شما
    حالا اگر این عملیات به صورت async تعریف بشه هر کدوم از این درخواست ها در یک ترد انجام می شه درسته ؟
    سلام.
    اقای حکیم کامل توضیح دادن.
    اما شما فکر کن 1000 نفر رو بفرستی تو جاده ای که ظرفیت 100 نفر رو داره اینجا دچار مشکل میشی.
    async به این صورت نیست چون میاد و صف ایجاد می کنه کاملا کارایی سیستم رو بالا ببره.
    شما باید درست و در جای خودش استفاده کنید. به نظرم بهترین مثال نگاه کردن identity sample.
    بعضی وقت های تو برنامه جاهایی هست که شما مطالب در در چند جا درج می کنی یا میفرستی و اینها تاثیری در روند کاری هم ندارن. مثل ارسال ایمیل یا همون اس ام اس بعد ازخرید . شما می تونید این رو به async بدین و بقیه کارهاتون رو انجام بدین.

تاپیک های مشابه

  1. پاسخ: 3
    آخرین پست: شنبه 14 تیر 1393, 11:15 صبح
  2. به چه دلیل باید از پایگاه داده مونگو استفاده کنم؟
    نوشته شده توسط Amir-Shabani در بخش NoSQL
    پاسخ: 2
    آخرین پست: پنج شنبه 23 آبان 1392, 12:05 عصر
  3. تفاوت strong pointer با shared pointer و weak pointer چیست و در چه زمانی باید از آنها استفاده کرد؟
    نوشته شده توسط p_ooya در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: شنبه 13 خرداد 1391, 20:41 عصر
  4. پاسخ: 8
    آخرین پست: شنبه 08 بهمن 1390, 09:52 صبح
  5. سوال: چه مواقعی باید از توارث استفاده کرد؟
    نوشته شده توسط mostafapro در بخش C#‎‎
    پاسخ: 1
    آخرین پست: دوشنبه 05 اردیبهشت 1390, 17:50 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •