تفاوت چند نخی با Asynchronous در #c

سوال

سلام دوستای عزیزم کسی جواب این سوالو میدونه؟؟

کی میتونه برام توضیح بده تفاوت چند نخی با Asynchronous چیه؟ دستتون درد نکنه

ممنون از انجمن درسمن

حل شده 1
golsa Mohammadi 4 سال 5 پاسخ ها 1439 دیده شده 2

پاسخ ها ( ۵ )

  1. مفهوم Asynchronous به ماهیت Non-Blocking یک متد یا فرایند اشاره می کند. به طور ساده، می دانیم که در صورت صدا زدن یک متد، جریان برنامه متوقف می شود. پس از پایان یافتن متد، برنامه مجددا به مسیرِ اجرای خود ادامه خواهد داد. به این نوع از متد ها متدهای Blocking گفته می شود، بدین معنی که فرایند برنامه تا زمانِ اتمام این نوع از متد ها متوقف (بلاک) خواهد شد. اما در موردمتدهای Non-Blocking و یا Asynchronous قضیه فرق می کند و جریانِ اصلی برنامه پس از صدا زدن متد، معطل تمام شدن متد نخواهد ماند و به مسیر خود ادامه خواهد داد. این نوع از متدها معمولا در مورد امور I/O و مواردی که در حوزه سیستم عامل، دیسک و شبکه و پایگاه داده و … می باشند، مورد استفاده قرار می گیرند.
    از سوی دیگر مفهوم Multi Threading به این موضوع اشاره می کند که یک تکه از کد همزمان توسط چند Thread در حال اجرا می باشد. این نوع از اجرا بیشتر در مورد کد هایی استفاده می شوند که به اصطلاح CPU Bound بوده و دارای بار پردازشی زیادی می باشند. با تقسیم بار بین چند پردازنده سعی می کنیم، موجب سریع تر و بهینه تر شدن کد شویم.

  2. عرض سلام و ادب خدمت شما

    امروزه برنامه نویسی غیرهمزمان (Asynchronous) نزد توسعه دهندگان بسیارمحبوب شده است. وقتی ما با Ui سروکار داریم و یک متد که زمان اجرای آن طولانیست ( مثل خواندن یک فایل بزرگ و ذخیره آن در پایگاه داده) را در رویداد کلیکِ یک دکمه می گذاریم زمانی که روی آن دکمه کلیک شود رابط کاربری اپلیکیشن قفل شده و به اصطلاح هنگ می کند، زیرا رابط کاربری و بقیه متد ها در برنامه نویسی همزمان(Synchronous) در یک نخ (Thread) از CPU اجرا می شوند پس رابط کاربری تا زمانی که فعالیت متد خاتمه نیابد پاسخی به کاربر نخواهد داد.
    برنامه نویسی غیرهمزمان در این شرایط بسیار کار آمد است، زیرا در این روش رابط کاربری و متد ها به هم متکی نبوده و متد ها به صورت جداگانه اجرا می شوند. async و await دو برچسب هستند که مشخص می کنند در کدام بخش کد پاسخ دهی باید بعد از اتمام کار از سر گرفته شود.

    *اگر ما از کلمه await در متد خود استفاده نکنیم برنامه ما به صورت معمولی اجرا شده و کامپایلر آن را به صورت همزمان در نظر می گیرد. بدین ترتیب ما می توانیم با استفاده از دو کلمه کلیدی async و await در سی شارپ به صورت غیرهمزمان کد بزنیم.
    در پناه خدا

    بهترین پاسخ
  3. فرق اساسی Async با Sync در زمان اجرای دستورات است. در Sync یک درخواست بلافاصله اجرا می شود و بقیه سیستم باید منتظر پایان آن بماند. اما در Async درخواست به سیستم ارسال میشود و سیستم عامل قول میدهد که پایان آن را اعلام کند اما اینکه دقیقا کی انجام میشود معلوم نیست.

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

    از آنجا که زمان پایان در Async مشخص نیست Thread بعد از ارسال Task به سیستم عامل آزاد میشود و می تواند Request جدیدی را دریافت کند. می توان گفت در حالت Sync منابع سیستم بعد از پایان یک Request آزاد میشود اما در Async بعد از شروع Request آزاد میشود. با این روش صف زودتر پیش میرود و احتمال اینکه درخواستی به علت زمان طولانی شدن زمان انتظار برگشت بخورد کمتر می شود.

    در Async کار آهسته و پیوسته پیش میرود و همیشه حرکت رو به جلو وجود دارد. اما در Sync پیشرفت مقطعی است. وقتی ترافیک سرور بالا می رود عدم پیشرفت به خطای Server Time Out منجر میشود. در سرور Sync این حالت تا چند برابر (به صورت توانی) زودتر پیش می آید.

    نتیجه

    در وب توصیه میشود از متدهای Async استفاده کنید. معمولا پیاده سازی متدهای Async پیچیده تر است و کد نویسی آن زمان بیشتری می برد. اما در این روش منابع سرور به سرعت آزاد میشود و می تواند به Request های بیشتری پاسخ دهد. مخصوصا زمانی که با فایل یا دیتابیس کار می کنید.

  4. Multi-threading یا چندنخی برای انجام چندین کار موازی مورد استفاده قرار می گیرد. هر کار می تواند دارای چندین thread باشد. در یک نرم افزار multi-theareded، کاربر توانایی بیشتری در انجام کارها نسبت به یک نرم افزار singel-threaded دارد. امروزه، اکثر نرم افزار ها از multi-threading استفاده می کنند.

  5. و سخن آخر اینکه در کل استفاده از متدهای async بهتر از استفاده از چندین Thread در برنامه هست زیرا با استفاده از متد های async مدیریت بهتری در اجرای برنامه می توان داشت.

ارسال یک پاسخ