Introduktion till multithreading i C #

För att förstå multitrådning i c #, låt oss först förstå vad som är en tråd?

  • En tråd är en lättprocess.
  • Det är en körningsväg för ett program.
  • Det är den minsta behandlingsenheten i ett operativsystem.
  • Således kan en process ha flera trådar.

Så, multithreading är en process som innehåller flera trådar där varje tråd utför en annan aktivitet. Det sparar tid eftersom flera uppgifter körs samtidigt av olika trådar. Det ökar CPU-användningen och ökar effektiviteten i en applikation. Detta fungerar med konceptet med tidsdelning.

Syntax med förklaring

Thread first_thread_name = new Thread(new ThreadStart(method_to_be_executed1));
Thread second_thread_name = new Thread(new ThreadStart(method_to_be_executed2));
first_thread_name.Start();
second_thread_name.Start();

För att skapa en tråd måste vi skapa ett objekt i trådklassen. Trådklasskonstruktören tar hänvisning till ThreadStart. ThreadStart är en delegat som representerar en metod som måste köras när tråden börjar köras.

Tråden börjar köras när metoden Start () kallas.

Vi kan skapa en tråd utan att använda ThreadStart-delegat som visas i syntax nedan:

Thread thread_name = new Thread(method_to_be_executed);
thread_name.Start();

Skapa flera trådar i C #

För att skapa trådar måste vi importera systemet.Treading namespace. Vi kan skapa och initiera trådar med klassen Tråd.

Exempel med användning av trådklass

using System;
using System.Threading;
public class MultiThreadingDemo
(
public static void Method1()
(
for (int i = 0; i <= 5; i++)
(
Console.WriteLine("Method1 : (0)", i);
)
)
public static void Method2()
(
for (int i = 0; i <= 5; i++)
(
Console.WriteLine("Method2 : (0)", i);
)
)
public static void Main()
(
// Creating and initializing threads
Thread thread1 = new Thread(Method1);
Thread thread2 = new Thread(Method2);
//beginning thread execution
thread1.Start();
thread2.Start();
)
)

Produktion:

Exempel med hjälp av ThreadStart-delegat

using System;
using System.Threading;
public class MultiThreading
(
public static void Method1()
(
for (int i = 1; i <= 5; i++)
(
Console.WriteLine("Method1 : (0)", i);
)
)
public static void Method2()
(
for (int i = 1; i <= 5; i++)
(
Console.WriteLine("Method2 : (0)", i);
)
)
)
public class MultithreadingDemo
(
public static void Main()
(
Thread thread1 = new Thread(new ThreadStart(MultiThreading.Method1 ) );
Thread thread2 = new Thread(new ThreadStart(MultiThreading.Method2 ) );
thread1.Start();
thread2.Start();
)
)

Produktion:

Obs: Det är inte nödvändigt att metoder som används i multiträdning ska vara statiska som i de två exemplen ovan, både metoderna dvs Metod1 och Metod2 är statiska. Dessa metoder kan vara icke-statiska och i så fall måste vi först skapa ett objekt i klassen som innehåller metoder och sedan komma åt metoderna med objektet.

I C # innehåller ett program alltid en tråd dvs. Huvudtråd. När vi skapar andra trådar blir det ett multithreading-program och i C # multithreading finns det två typer av trådar:

  • Förgrundsgänga : Denna tråd fortsätter att köras tills den avslutar sitt arbete även om huvudtråden avslutas.
  • Bakgrundsgänga : När Huvudtråden avslutas slutar bakgrundstråd också att köras och avslutas med huvudtråden.

Metoder med exempel

Låt oss se några vanliga metoder i trådklass med exempel.

  • Viloläge (): Används för att pausa körningen av den aktuella tråden under en viss tidsperiod, så att andra trådar börjar köras.

Exempel:

using System;
using System.Threading;
public class Multithreading
(
public void Display()
(
for (int i = 1; i <= 10; i++)
(
Console.WriteLine(i);
//suspending execution of current thread for 100 milliseconds
Thread.Sleep(100);
)
)
)
public class MultithreadingDemo
(
public static void Main()
(
Multithreading multithreading = new Multithreading();
Thread thread1 = new Thread(new ThreadStart(multithreading.Display));
Thread thread2 = new Thread(new ThreadStart(multithreading.Display));
thread1.Start();
thread2.Start();
)
)

Produktion:

Utgången visar att båda trådarna körs parallellt.

  • Avbryt (): Används för att avsluta tråden eller vi kan säga att den används för att stoppa körningen av tråden permanent.

Exempel

using System;
using System.Threading;
public class Multithreading
(
public void Display()
(
for (int i = 0; i < 10; i++)
(
Console.WriteLine(i);
Thread.Sleep(100);
)
)
)
public class MultithreadingDemo
(
public static void Main()
(
Multithreading multithreading = new Multithreading();
Thread thread1 = new Thread(new ThreadStart(multithreading.Display));
Thread thread2 = new Thread(new ThreadStart(multithreading.Display));
Console.WriteLine("Threads start execution");
thread1.Start();
thread2.Start();
try
(
//terminating execution of thread using Abort()
thread1.Abort();
thread2.Abort();
Console.WriteLine("Threads execution terminated");
)
catch (ThreadAbortException threadAbortException)
(
Console.WriteLine(threadAbortException.ToString());
)
)
)

Produktion:

  • Gå med (): Används för att få alla samtalstrådar att vänta tills den aktuella tråden slutför sin körning och avslutas.

Exempel:

using System;
using System.Threading;
public class Multithreading
(
public void Display()
(
for (int i = 0; i < 5; i++)
(
Thread thread = Thread.CurrentThread;
Console.WriteLine(thread.Name +" : "+i);
Thread.Sleep(100);
)
)
)
public class MultithreadingDemo
(
public static void Main()
(
Multithreading multithreading = new Multithreading();
Thread thread1 = new Thread(new ThreadStart(multithreading.Display));
Thread thread2 = new Thread(new ThreadStart(multithreading.Display));
Thread thread3 = new Thread(new ThreadStart(multithreading.Display));
//Assigning names to threads using Name property
thread1.Name = "Thread1";
thread2.Name = "Thread2";
thread3.Name = "Thread3";
thread1.Start();
//Making Thread2 and Thread3 wait until Thread1 completes execution
thread1.Join();
thread2.Start();
thread3.Start();
)
)

Produktion:

Fördelar med multithreading i C #

  1. Hjälper till att upprätthålla ett lyhört användargränssnitt: Ibland har vi en tidskrävande metod i vår applikation. I så fall, om vi gör vår ansökan multetrådad, tar andra trådar ansvaret för genomförandet av den metoden medan huvudtråd kan fokusera på programmets lyhördhet. Således fryser den inte vår applikation genom att i tid ge ett korrekt svar till användaren.
  2. Ökar applikationens prestanda: Om vi ​​har så många trådar som det finns processorkärnor kommer varje tråd att köras oberoende och ökar antalet beräkningar per sekund.
  3. Trådar minimerar användningen av systemresurser eftersom de delar samma adressutrymme.
  4. Den gör koden både snabbare och enklare samtidigt.

Slutsats - Multithreading i C #

Trådklass ger många viktiga egenskaper som Prioritet, Namn, IsAlive, bakgrund som vi kan använda i vår multitrådningsapplikation. Trådsynkronisering är en teknik genom vilken en tråd kan komma åt en resurs under en viss tid utan avbrott i andra trådar tills den slutför sin uppgift.

Rekommenderade artiklar

Detta har varit en guide till multithreading i C #. Här diskuterar vi också deras introduktion, syntax, skapelse och exempel på multithreading i c #. Du kan också titta på följande artiklar för att lära dig mer–

  1. Objekt i C #
  2. Destruktor i C #
  3. Destruktor i C #
  4. Arv i C #
  5. Destructor i PHP | exempel

Kategori: