Uvod v večnamensko branje v C #

Da bi razumeli večbesedno branje v c #, najprej razumemo, kaj je nit?

  • Niti je lahka teža.
  • To je pot izvajanja programa.
  • Je najmanjša enota obdelave v operacijskem sistemu.
  • Tako ima lahko proces več niti.

Torej, večkratno branje je postopek, ki vsebuje več niti, pri čemer vsaka nit izvaja drugačno aktivnost. Prihrani čas, ker različne naloge hkrati izvajajo različne niti. Povečuje izkoriščenost CPU-ja in povečuje učinkovitost aplikacije. To deluje na konceptu delitve časa.

Skladnja s pojasnilom

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();

Če želimo ustvariti nit, moramo ustvariti predmet razreda Thread. Konstruktor razreda Thread se sklicuje na ThreadStart. ThreadStart je delegat, ki predstavlja metodo, ki jo je treba izvesti, ko se nit začne izvajati.

Niti se začne izvajati, ko pokličete metodo Start ().

Niti lahko ustvarimo, ne da uporabimo delegat ThreadStart, kot je prikazano v spodnji sintaksi:

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

Ustvarjanje več niti v C #

Za ustvarjanje niti moramo uvoziti sistem.Threading namespace. Teme lahko ustvarimo in inicializiramo z razredom Thread.

Primer z uporabo razreda navojev

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();
)
)

Izhod:

Primer z delegatom ThreadStart

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();
)
)

Izhod:

Opomba: Ni nujno, da bi morale biti metode, ki se uporabljajo pri večbežnem branju, statične, kot v zgornjih dveh primerih, obe metodi, tj. Method1 in Method2, sta statični. Te metode so lahko nestalne in v tem primeru moramo najprej ustvariti predmet razreda, ki vsebuje metode, nato pa do metod dostopati do predmeta.

V programu C # program vedno vsebuje eno nit, tj. Glavno nit. Ko ustvarjamo druge niti, postane program za večnamensko branje in v C # multithreading sta dve vrsti niti:

  • Niti v ospredju : Ta nit se izvaja, dokler ne konča svojega dela, tudi če se glavna nit konča.
  • Ozadje Niti: Ko se konča glavna nit, se tudi ozadje nit ustavi in ​​se konča z glavno nitjo.

Metode s primeri

Poglejmo nekaj pogosto uporabljenih metod razreda Thread s primeri.

  • Sleep (): Uporablja se za zaustavitev izvajanja trenutne niti za določeno časovno obdobje, tako da se začnejo izvajati drugi niti.

Primer:

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();
)
)

Izhod:

Rezultat kaže, da sta oba niti izvedena vzporedno.

  • Prekini (): Uporablja se za zaključek niti ali lahko rečemo, da se trajno ustavi izvajanje niti.

Primer

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());
)
)
)

Izhod:

  • Join (): Uporablja se, da vse klicne niti počakajo, da trenutna nit dokonča izvedbo in se konča.

Primer:

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();
)
)

Izhod:

Prednosti Multithreading v C #

  1. Pomaga pri vzdrževanju odzivnega uporabniškega vmesnika: Včasih imamo v svoji aplikaciji dolgotrajen način. V tem primeru, če naredimo našo aplikacijo več zaporedno, potem druga nit prevzame odgovornost za izvajanje te metode, medtem ko se lahko glavna nit osredotoči na odzivnost aplikacije. Tako naša aplikacija ne bo zamrznila s pravočasnim odzivom uporabnika.
  2. Poveča uspešnost aplikacije: Če imamo toliko niti, kolikor je procesorskih jeder, se bo vsaka nit izvajala neodvisno, kar poveča število izračunov na sekundo.
  3. Niti minimizirajo uporabo sistemskih virov, saj imajo isti naslovni prostor.
  4. Naredi kodo hkrati hitrejšo in enostavnejšo.

Zaključek - Večserijsko branje v C #

Razred navojev ponuja številne pomembne lastnosti, kot so Priority, Name, IsAlive, ozadje, ki ga lahko uporabimo v naši večserijski aplikaciji. Sinhronizacija niti je tehnika, s katero nit lahko dostopa do vira za določen čas brez prekinitve drugih niti, dokler ne opravi svoje naloge.

Priporočeni članki

To je vodnik za večnamensko branje v C #. Tukaj razpravljamo tudi o njihovem uvajanju, sintaksi, ustvarjanju in primerih večstranskega branja v c #. Za več informacij si lahko ogledate tudi naslednje članke -

  1. Predmeti v C #
  2. Destruktor v C #
  3. Destruktor v C #
  4. Dedovanje v C #
  5. Destruktor v PHP | Primeri