Uvod u multithreading u C #

Da bismo razumjeli multithreading u c #, prvo razumimo što je nit?

  • Konac je lagan proces.
  • To je put izvođenja programa.
  • To je najmanja jedinica obrade u operativnom sustavu.
  • Prema tome, proces može imati više niti.

Dakle, multithreading je proces koji sadrži više niti u kojima svaka nit obavlja različitu aktivnost. Ušteda vrijeme jer više zadataka istovremeno izvršava različite teme. Povećava korištenje CPU-a i povećava učinkovitost aplikacije. To djeluje na konceptu dijeljenja vremena.

Sintaksa s objašnjenjem

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

Da bismo stvorili nit, moramo stvoriti objekt klase Thread. Konstruktor klase Thread odnosi se na ThreadStart. ThreadStart je delegat koji predstavlja metodu koju treba izvršiti kada nit započne izvršavanje.

Konac započinje izvršenje kad se pozove metoda Start ().

Možemo stvoriti nit bez upotrebe delegata ThreadStart kao što je prikazano u donjoj sintaksi:

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

Izrada više niti u C #

Da bismo stvorili niti, moramo uvoziti system.Threading prostor s imenima. Možete stvoriti i inicijalizirati niti pomoću klase Thread.

Primjer korištenja klase niti

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

Izlaz:

Primjer pomoću ThreadStart delegata

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

Izlaz:

Napomena: Nije neophodno da metode korištene u višestrukom navoju budu statične kao u prethodna dva primjera, obje metode, tj. Method1 i Method2 su statične. Ove metode mogu biti nestalne i u tom slučaju prvo moramo stvoriti objekt klase koji sadrži metode, a zatim pristupiti metodama pomoću objekta.

U C # programu uvijek sadrži jednu nit, tj. Glavnu nit. Kad stvaramo druge niti, to postaje program za višestruko čitanje, a u C # multithreading postoje dvije vrste niti:

  • Prednja nit : Ova nit nastavlja izvršavati sve dok ne dovrši svoj rad, čak i ako glavna nit prestane.
  • Pozadinska nit : Kad se glavna nit završi, pozadinska nit se također zaustavlja i izvršava s glavnom niti.

Metode s primjerima

Pogledajmo neke najčešće korištene metode klase Thread s primjerima.

  • Sleep (): Koristi se za pauziranje izvršenja trenutne niti za određeno vremensko razdoblje, kako bi drugi niti započeli izvršenje.

Primjer:

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

Izlaz:

Izlaz pokazuje da su oba konca izvedena paralelno.

  • Prekini (): koristi se za završetak niti ili možemo reći da se trajno zaustavlja izvršenje niti.

Primjer

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

Izlaz:

  • Pridruži se (): koristi se za pozivanje svih niti poziva koje čekaju dok trenutni niz dovrši izvršenje i ne završi.

Primjer:

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

Izlaz:

Prednosti Multithreading u C #

  1. Pomaže u održavanju responzivnog korisničkog sučelja: Ponekad je u našoj aplikaciji potrebno dugotrajan način. U tom slučaju, ako našu aplikaciju učinimo višeslojnom, tada druga nit preuzima odgovornost za izvršavanje te metode, dok se glavna nit može usredotočiti na reaktivnost aplikacije. Dakle, neće zamrznuti našu aplikaciju pravodobnim odavanjem ispravnog odgovora korisniku.
  2. Povećava performanse aplikacije: Ako imamo toliko niti koliko ima procesorskih jezgara, svaki će se niz pokrenuti neovisno povećavajući broj izračuna u sekundi.
  3. Konci minimaliziraju upotrebu resursa sustava jer dijele isti adresni prostor.
  4. To čini kod istovremeno i bržim i jednostavnijim.

Zaključak - Multithreading u C #

Klasa navoja pruža mnoga važna svojstva kao što su Priority, Name, IsAlive, pozadina koja možemo koristiti u našoj multithreading aplikaciji. Sinkronizacija niti je tehnika kojom nit može pristupiti resursu za određeno vrijeme bez prekida drugih niti dok ne ispuni svoj zadatak.

Preporučeni članci

Ovo je vodič za Multithreading u C #. Ovdje također raspravljamo o njihovom uvodu, sintaksi, stvaranju i primjerima višeslojnih čitanja u c #. Možete također pogledati sljedeće članke da biste saznali više -

  1. Objekti u C #
  2. Destruktor u C #
  3. Destruktor u C #
  4. Nasljeđivanje u C #
  5. Destruktor u PHP-u | Primjeri

Kategorija: