مفهوم Multithreading و Multitasking در#C

سه شنبه 22 تیر 1395

multi-tasking به معنای انجام چند کار بصورت همزمان است . multi-threading برای انجام چندین کار مورد استفاده قرار میگیرد . ما در این مقاله multi-tasking و multi-threading را با ارائه ی مثال ، به طور کامل مورد بررسی قرار می دهیم .

مفهوم Multithreading و Multitasking در#C


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  میتوانید کارهای دیگری را نیز انجام دهید .

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 4k بازدید
  • 5 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید