چندنخی

Category : دات نت | Sub Category : سی شارپ Posted on 2020-11-02 19:52:33


چندنخی


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

Multitasking عبارت است از اجرای همزمان چندین کار یا فرایند در یک بازه زمانی خاص. سیستم عامل ویندوز نمونه ای از چند وظیفه ای است چون میتونه  بیش از یک فرآیند را همزمان با اجرای Google Chrome ، Notepad ، VLC player و غیره اجرا کند. سیستم عامل از اصطلاح معروف به یک فرآیند برای اجرای همزمان همه این برنامه ها استفاده می کند. فرآیند بخشی از یک سیستم عامل است که وظیفه اجرای یک برنامه را بر عهده دارد. هر برنامه ای که روی سیستم شما اجرا می شود یک فرایند است و برای اجرای کد درون برنامه ، یک فرآیند از اصطلاح معروف به عنوان موضوع استفاده می کند.


موضوع یک پروسه سبک است یا به عبارتی دیگر موضوع یک واحد است که کد مورد نظر را در برنامه اجرا می کند. بنابراین هر برنامه منطقی دارد و یک موضوع مسئول اجرای این منطق است. هر برنامه به طور پیش فرض دارای یک موضوع برای اجرای منطق برنامه است و موضوع به عنوان Thread اصلی شناخته می شود ، بنابراین هر برنامه یا برنامه به صورت پیش فرض مدل تک رشته ای است. این مدل تک رشته ای دارای یک اشکال است. موضوع واحد تمام مراحل موجود در برنامه را به صورت همگام سازی ، به معنی یکی پس از دیگری انجام می دهد. بنابراین ، فرایند دوم منتظر می ماند تا اولین فرآیند اجرای آن به پایان برسد ، زمان بیشتری را در پردازش مصرف می کند.


به عنوان مثال ، ما یک کلاس به نام book داریم و این کلاس شامل دو روش مختلف است ، یعنی متد 1 ، متد2. اکنون موضوع اصلی وظیفه اجرای تمام این روش ها را دارد ، بنابراین موضوع اصلی همه این روش ها را یک به یک اجرا می کند.

using System; 
using System.Threading; 

public class book { 

//متد اولی

	public static void method1() 
	{ 

		// چاپ اعداد بین صفر تا 10
		for (int I = 0; I <= 10; I++) { 

			Console.WriteLine("Method1 is : {0}", I); 

			// زمانی که مقدار متغییر برابر با 5 میشه 
			//ترد اینجا ایست میکنه  یا به اصلاح می خوابه
			// در ثانیه 6 شروع به کار میکنه
			
			if (I == 5) { 
				Thread.Sleep(6000); 
			} 
		} 
	} 

	// متد استاتیک دوم
	public static void method2() 
	{ 

		
		for (int J = 0; J <= 10; J++) { 

			Console.WriteLine("Method2 is : {0}", J); 
		} 
	} 
} 


public class GFG { 

	
	static public void Main() 
	{ 
//فراخوانی متدها
	
		book.method1(); 
		book.method2(); 
	} 
} 


نتیجه

Method1 is : 0
Method1 is : 1
Method1 is : 2
Method1 is : 3
Method1 is : 4
Method1 is : 5
Method1 is : 6
Method1 is : 7
Method1 is : 8
Method1 is : 9
Method1 is : 10
Method2 is : 0
Method2 is : 1
Method2 is : 2
Method2 is : 3
Method2 is : 4
Method2 is : 5
Method2 is : 6
Method2 is : 7
Method2 is : 8
Method2 is : 9
Method2 is : 10

 

توضیح: در اینجا ، اول از همه ، متد 1 اجرا می شود. در متد 1 ، برای حلقه از 0 شروع می شود وقتی مقدار i برابر با 5 باشد ، این روش به مدت 6 ثانیه به خواب می رود و پس از 6 ثانیه روند خود را از سر می گیرد و مقدار باقی مانده را چاپ می کند. تا زمانی که متد2 در حالت انتظار باشد. متد2 کار خود را با اتمام متد 1 کار خود را شروع کنید. بنابراین ، برای غلبه بر مشکل چند رشته ی مدل پیچی ارائه شده است



چند رشته فرایندی است که شامل چندین موضوع در یک فرآیند واحد است. در اینجا هر موضوع فعالیت های متفاوتی انجام می دهد. به عنوان مثال ، ما یک کلاس داریم و این فراخوانی شامل دو روش مختلف است ، اکنون با استفاده از multithreading هر روش توسط یک موضوع جداگانه اجرا می شود. بنابراین مهمترین مزیت multithreading این است که به طور همزمان کار می کند ، به معنای اجرای چندین کار همزمان است. و همچنین به حداکثر رساندن استفاده از CPU به دلیل کار چند منظوره در مفهوم به اشتراک گذاری زمان به این معنی است که هر موضوع زمان خود را برای اجرای زمان می برد و بر اجرای موضوع دیگر تاثیری ندارد ، این بازه زمانی توسط سیستم عامل داده می شود.

using System; 
using System.Threading; 

public class GFG { 

	// متداستاتیک اول
	public static void method1() 
	{ 

		// چاپ یک تا 10 
		for (int I = 0; I <= 10; I++) { 
			Console.WriteLine("Method1 is : {0}", I); 

			// زمانی که مقدار متغییر برابر 5 میشه به خواب میره
			// عین متد قبل تو ثانیه6 مجدد اجرا میشه
			if (I == 5) { 
				Thread.Sleep(6000); 
			} 
		} 
	} 

	// متد دوم
	public static void method2() 
	{ 
		
		for (int J = 0; J <= 10; J++) { 
			Console.WriteLine("Method2 is : {0}", J); 
		} 
	} 

	
	static public void Main() 
	{ 

		// ایجاد ترد و اجرای برنامه
		Thread thr1 = new Thread(method1); 
		Thread thr2 = new Thread(method2); 
		thr1.Start(); 
		thr2.Start(); 
	} 
} 


نتیجه

Method1 is : 0
Method1 is : 1
Method1 is : 2
Method1 is : 3
Method2 is : 0
Method2 is : 1
Method2 is : 2
Method2 is : 3
Method2 is : 4
Method2 is : 5
Method2 is : 6
Method2 is : 7
Method2 is : 8
Method2 is : 9
Method2 is : 10
Method1 is : 4
Method1 is : 5
Method1 is : 6
Method1 is : 7
Method1 is : 8
Method1 is : 9
Method1 is : 10 











نظر بده: