برنامه نویسی چند نخی در سی شارپ
با سلام خدمت دوستان و همراهان صفر تا قهرمان و علاقه مندان به برنامه نویسی ! در این قسمت از سری مقالات آموزشی سی شارپ قصد داریم به مبحث برنامه نویسی چند نخی (MultiThreading) بپردازیم. این مبحث یکی از مهمترین مباحث مربوط به هر زبان برنامه نویسی است که هر برنامه نویس برای نوشتن برنامه های بزرگ و کوچک و همچنین انجام چندکار همزمان از آن بهره میگیرد.
یک نخ، به عنوان مسیر اجرای یک برنامه تعریف میشود. هنگامی که برنامه شما بسیار پیچیده شده و عملیات های زمان بر در آن وجود دارد، استفاده از نخ ها میتواند مفید باشد و هر نخ میتواند بخشی از کار را به صورت مستقل اجرا کند.
نخ ها در واقع پردازش هایی سبک هستند و استفاده از نخ ها منجر به کاهش هدر رفتن پردازنده و افزایش بهینگی برنامه میشود. در گذشته برنامه ها به صورت تک نخی نوشته میشدند و یک نخ به عنوان برنامه اصلی وظیفه اجرای برنامه را بر عهده داشت. اما در این روش برنامه ها میتوانستند در یک زمان تنها یک کار را انجام دهند. برای اینکه یک برنامه بتواند چندکار را به صورت همزمان اجرا کند، آن را به نخ های کوچکتر تقسیم میکنند.
چرخه زندگی یک نخ
چرخه زندگی یک نخ هنگامی شروع میشود که یک شئ از کلاس system.Threading.thread ایجاد شود و هنگامی پایان میابد که نابود شود یا وظیفه آن به پایان رسیده باشد. در ادامه مراحل زندگی یک نخ را مشاهده میکنید :
- حالت شروع نشده : هنگامی است که شئ thread ساخته شده اما هنوز متد شروع آن صدا زده نشده است.
- حالت آماده : حالتی است که نخ آماده اجراست و منتظر پالس پردازنده است
- حالت غیرقابل اجرا: یک نخ به دلایل زیر ممکن است اجرا نشود:
- متد sleep صدا زده شده
- متد wait صدا زده شده
- به وسیله عملگرهای I/O بلاک شده باشد
- حالت مرده : حالتی است که یک نخ به انتهای وظیفه خود رسیده است.
نخ اصلی
در سی شارپ از کلاس system.Threading.Thread برای کار با نخ ها استفاده میشود. این کلاس اجازه ایجاد و دسترسی به هر نخ را در برنامه های چند نخی میدهد. اولین نخی که باید اجرا شود را نخ اصلی (Main Thread) میگویند. وقتی یک برنامه سی شارپ اجرا میشود، نخ اصلی به صورت خودکار ایجاد میشود. نخ های ایجاد شده به وسیله کلاس Thread نخ های فرزند نامیده میشوند. شما میتوانید با استفاده از صفت CurrentThread از کلاس Thread به یک نخ دسترسی داشته باشید. برنامه زیر اجرای نخ اصلی را نشان میدهد :
using System; using System.Threading; namespace MultithreadingApplication { class MainThreadProgram { static void Main(string[] args) { Thread th = Thread.CurrentThread; th.Name = "MainThread : (ZeroTohero)"; Console.WriteLine("This is {0}", th.Name); Console.ReadKey(); } } }
وقتی کد بالا اجرا شود خروجی زیر را تولید میکند :
This is MainThread : (ZeroToHero)
ایجاد یک نخ
همانطور که گفتیم نخ ها با استفاده از کلاس Thread ایجاد میشوند. نخ هایی که با استفاده از این کلاس ساخته میشوند (نخ های فرزند) برای اینکه اجرا شوند نیاز دارند که متد Start صدا زده شود. در ادامه نحوه ساخت و صدا زدن یک نخ به صورت کد نشان داده شده است :
using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { Console.WriteLine("Child thread starts (ZeroToHero)"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } }
در کد بالا در متد main برنامه در ابتدا یک نخ ایجاد میشود اما هنوز اجرا نشده است. سپس یک شئ از کلاس Thread ساخته شده و پس از صدا زدن متد Start نخ ما که همان متد calltochildThread است اجرا میشود.
کد بالا را در ویژوال استودیو اجرا کنید خروجی زیر را خواهید دید :
In Main: Creating the Child thread Child thread starts (ZeroTohero)
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.