مفهوم Multithreading و Multitasking در#C
سه شنبه 22 تیر 1395multi-tasking به معنای انجام چند کار بصورت همزمان است . multi-threading برای انجام چندین کار مورد استفاده قرار میگیرد . ما در این مقاله multi-tasking و multi-threading را با ارائه ی مثال ، به طور کامل مورد بررسی قرار می دهیم .
Multi_Tasking :
Multi_Tasking به کاربران این اجازه را میدهد که چند کار را بطور همزمان انجام دهند . کاربران میتوانند به موزیکی که در پس زمینه در حال اجراست گوش کنند ، درحالی که مشغول نوشتن مطالب وبلاگشان هستند .
بعد از آن ، کامپیوتر انجام دهنده چندین کار برای کاربر است . هر کار به یکسری منابع احتیاج داره (حافظه ، CPU ، RAM و ...) . از زمانی که کامپیوترها منابع را محدود کردن ، تعداد کارهایی که بطور همزمان اجرا میشوند نیز محدود شدند.
Multi-threading :
Multi-threading برای انجام چندین کار مورد استفاده قرار میگیرد . هر کار میتواند دارای چندین thread باشد . در یک نرم افزار multi-theareded ،کاربر توانایی بیشتری در انجام نسبت به یک نرم افزار singel-threaded دارد . امروزه ، اکثره نرم افزار ها از multi-threading استفاده میکنند . یک نرم افزار یا یک فرآیند میتواند یک thread رابط کاربری داشته باشد که فعل و انفعالات رخ داده توسط کاربر و thread های فرآیندهایی که در پس زمینه در حال اجرا هستند را مدیریت میکند .
انتظار کشیدن برای بارگذاری حجم عظیمی از اطلاعات از پایگاه داده را در نظربگیرید . این شبیه یک انتظار طولانی برای رسیدن پیتزا است وقتی که شما خیلی گرسنه اید . multi-tasking بیان دارد که شما در این حین که منتظره رسیدن پیتزا هستید میتوانید بازی کامپیوتری کنید یا تلویزیون نگاه کنید . با این راه ، صبر کردن برای شما خیلی راحت تر میشود .
بعد از ارائه این توضیحات اجازه بدهید سراغ کد زدن بریم تا ببینیم multi-tasking و multi-threading در #C چگونه کار میکنند .
مثال 1 :
مرحله اول : یک پروژه جدید در visual studio بسازید
مرحله دوم : namespace های زیر را به برنامه اضافه کنید
using System.Threading;
using System.Threading.Tasks;
مرحله سوم : یک کلاس جدیدی با نام work بسازید . (نام کلاس دلخواه است و در دست برنامه نویس است )
مرحله چهارم : در کلاس work یک متد با نام count بسازید (نام متد نیز قابل تغییر دادن است )
کد های زیر را بنویسید :
مرحله پنجم : کدهای زیر را در قسمت Main بنویسید :
عبارت Thread thread1 = new Thread(s) یک thread جدید را میسازد .
با عبارت thread.Start() ، thread ما شروع خواهد شد .
مرحله ششم : برنامه را اجرا کنید ، نتیجه در زیر نشان داده شده است :
نتایج حاصله نشان می دهد main thread بعد از thread1 به پایان رسیده است . main thread برای تکمیل و اتمام شمارش thread1 منتظر نمانده است . هر دو thread کار را بضورت مستقل انجام میدهند . این کار میتواند انجام شود در حالی که یک فایل حجیم در حال بارگذاری است .
مرحله هفتم : اجازه دهید یک thread دیگر بسازیم .
یک متد جدید با نام "Alphabet" در کلاس Work بسازید و کد های زیر را در آن وارد کنید :
مرحله هشتم : یک thread جدید در متد Main بسازید .
کدهای شما باید شبیه زیر باشد :
مرحله نهم : برنامه را اجرا کنید :
نتیجه بدست آمده نشان میدهد که cpu چطور به هر thread برای اجرا زمان میدهد . زمانی که thread1 شروع میشود ، آن تا 0 شمارش کرده ، cpu عوض می شود و در اختیار thread2 قرار میگیرد و اجرای آن شروع می شود . بعد از اجرای thread2 ، دوباره cpu در اختیارthread1 قرار میگیرد . cpu برای هر thread زمان محدودی را در نظر میگیرد .
خروجی در هر بار اجرا باید متفاوت باشد . اگر شما قصد اتمام تمام thread ها در یک زمان رو دارید ، شما میتوانید یرای رسیدن به این هدف از Join() استفاده کنید .
حالا، اجازه بدین یه مثال برای multi-tasking در C# بزنیم .
مثال 2 :
مرحله اول : یک پروژه console Aplication در visual studio بسازید .
مرحله دوم : یک کلاس جدید با یک نام دلخواه بسازید .
مرحله سوم : یک متد جدید در کلاس بسازید ، که یک کپی از یک فایل دریافتی میسازد .
کلاس مذکور همانند زیر میباشد :
شما میتوانید ادرس فایلی را که قصد کپی کردن آن را دارید تغییر دهید . همچنین میتوانید ادرس مقصد را نیز تغییر دهید .
مرحله چهارم : یک task جدید در متد Main بسازید .
کد شما باید شبیه زیر باشد :
مرحله پنجم : برنامه را اجرا کنید :
نتایج نشان میدهد که main thread قبل از اینکه فایل کپی کردن را کپی کند ، به اتمام رسیده است . این بدان معنی است که هنگامی که فایل در حال کپی شدن است ، شما در main thread میتوانید کارهای دیگری را نیز انجام دهید .
آموزش سی شارپ
- C#.net
- 4k بازدید
- 5 تشکر