Introduktion til multithreading i C #
For at forstå multithreading i c #, lad os først forstå, hvad der er en tråd?
- En tråd er en letvægtsproces.
- Det er en eksekveringssti for et program.
- Det er den mindste behandlingsenhed i et operativsystem.
- Således kan en proces have flere tråde.
Så multithreading er en proces, der indeholder flere tråde, hvor hver tråd udfører en anden aktivitet. Det sparer tid, fordi flere opgaver udføres på samme tid af forskellige tråde. Det øger CPU-udnyttelsen og øger effektiviteten af en applikation. Dette fungerer på tidsdelings-konceptet.
Syntaks med forklaring
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();
For at oprette en tråd, er vi nødt til at oprette et objekt i trådklassen. Trådklasse-konstruktøren henviser til ThreadStart. ThreadStart er en delegeret, der repræsenterer en metode, der skal udføres, når tråden begynder udførelse.
Tråden begynder udførelse, når Start () -metoden kaldes.
Vi kan oprette en tråd uden at bruge ThreadStart delegeret som vist i syntax nedenfor:
Thread thread_name = new Thread(method_to_be_executed);
thread_name.Start();
Oprettelse af flere tråde i C #
For at oprette tråde er vi nødt til at importere systemet. Træning af navneområde. Vi kan oprette og initialisere tråde ved hjælp af klassen Tråd.
Eksempel ved hjælp af trådklasse
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:
Eksempel ved hjælp af ThreadStart delegeret
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:
Bemærk: Det er ikke nødvendigt, at metoder, der anvendes i multithreading, skal være statiske som i de to ovenstående eksempler, både metoderne, dvs. metode1 og metode2, er statiske. Disse metoder kan være ikke-statiske, og i dette tilfælde skal vi først oprette et objekt i klassen, der indeholder metoder, og derefter få adgang til metoderne ved hjælp af objektet.I C # indeholder et program altid en tråd, dvs. Hovedtråd. Når vi opretter andre tråde, bliver det et multithreading-program, og i C # multithreading er der to typer tråde:
- Forgrundstråd : Denne tråd kører fortsat, indtil den er færdig med sit arbejde, selvom hovedtråden slutter.
- Baggrundstråd : Når hovedtråd afsluttes, stopper baggrundstråd også med at udføre og afsluttes med hovedtråden.
Metoder med eksempler
Lad os se nogle ofte anvendte metoder i trådklasse med eksempler.
- Sleep (): Bruges til at sætte en gang på udførelsen af den aktuelle tråd i et bestemt tidsrum, så andre tråde begynder udførelsen.
Eksempel:
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:
Outputet viser, at begge tråde udføres parallelt.
- Afbryd (): Bruges til at afslutte tråden, eller vi kan sige, at den bruges til at stoppe udførelsen af tråden permanent.
Eksempel
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:
- Deltag (): Bruges til at få alle opkaldstråd til at vente, indtil den aktuelle tråd afslutter udførelsen og afsluttes.
Eksempel:
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:
Fordele ved multithreading i C #
- Hjælper med at opretholde en lydhør brugerflade: Nogle gange har vi en tidskrævende metode i vores applikation. I dette tilfælde, hvis vi gør vores applikation multetråd, tager anden tråd ansvar for udførelsen af denne metode, mens Main thread kan fokusere på programmets reaktionsevne. Således fryser den ikke vores applikation ved rettidigt at give et korrekt svar til brugeren.
- Øger applikationens ydelse: Hvis vi har så mange tråde, som der er processorkerner, kører hver tråd uafhængigt og øger antallet af beregninger pr. Sekund.
- Tråde minimerer brugen af systemressourcer, da de deler det samme adresserum.
- Det gør kode både hurtigere og enklere på samme tid.
Konklusion - Multithreading i C #
Trådklasse giver mange vigtige egenskaber som Prioritet, Navn, IsAlive, baggrund, som vi kan bruge i vores multitrådeapplikation. Trådsynkronisering er en teknik, hvormed en tråd kan få adgang til en ressource i et bestemt tidspunkt uden afbrydelse af andre tråde, indtil den afslutter sin opgave.
Anbefalede artikler
Dette har været en guide til multithreading i C #. Her diskuterer vi også deres introduktion, syntaks, oprettelse og eksempler på multithreading i c #. Du kan også se på de følgende artikler for at lære mere–
- Objekter i C #
- Destructor i C #
- Destructor i C #
- Arv i C #
- Destructor i PHP | eksempler