Vícevláknové zpracování v C # - Tvorba a metody multithreadingu v C #

Obsah:

Anonim

Úvod do multithreadingu v C #

Abychom porozuměli multithreadingu v c #, nejprve pochopíme, co je vlákno?

  • Vlákno je lehký proces.
  • Je to cesta provádění programu.
  • Je to nejmenší jednotka zpracování v operačním systému.
  • Proces tedy může mít více vláken.

Vícevláknové zpracování je tedy proces, který obsahuje více vláken, přičemž každé vlákno provádí jinou aktivitu. Šetří čas, protože více úloh je prováděno současně pomocí různých vláken. Zvyšuje využití CPU a zvyšuje efektivitu aplikace. Toto pracuje na konceptu sdílení času.

Syntaxe s vysvětlením

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

Chcete-li vytvořit vlákno, musíme vytvořit objekt třídy Thread. Konstruktor třídy Thread vezme odkaz na ThreadStart. ThreadStart je delegát, který představuje metodu, kterou je třeba provést, když vlákno začne provádět.

Při vyvolání metody Start () se vlákno spustí.

Můžeme vytvořit vlákno bez použití delegáta ThreadStart, jak je ukázáno v níže uvedené syntaxi:

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

Vytváření více vláken v C #

Abychom mohli vytvořit vlákna, musíme importovat jmenný prostor system.Threading. Můžeme vytvářet a inicializovat vlákna pomocí třídy Thread.

Příklad použití třídy vlákna

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

Výstup:

Příklad použití delegáta 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();
)
)

Výstup:

Poznámka: Není nutné, aby metody používané v multithreadingu byly statické, jako ve výše uvedených dvou příkladech, obě metody tj. Method1 a Method2 jsou statické. Tyto metody mohou být nestatické a v takovém případě musíme nejprve vytvořit objekt metod obsahujících třídu a poté přistupovat k metodám pomocí objektu.

V C # program vždy obsahuje jedno vlákno, tj. Hlavní vlákno. Když vytváříme další vlákna, stane se z nich multithreadingový program a v C # multithreadingu existují dva typy vláken:

  • Vlákno v popředí : Toto vlákno pokračuje v provádění, dokud nedokončí svou práci, i když hlavní vlákno skončí.
  • Vlákno na pozadí : Když končí hlavní vlákno, vlákno na pozadí také zastaví provádění a ukončí s hlavním vláknem.

Metody s příklady

Podívejme se na některé běžně používané metody třídy vláken s příklady.

  • Sleep (): Používá se k pozastavení provádění aktuálního vlákna po stanovenou dobu, takže ostatní vlákna mohou začít provádět.

Příklad:

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

Výstup:

Výstup ukazuje, že obě vlákna jsou spuštěna paralelně.

  • Abort (): Používá se k ukončení podprocesu nebo můžeme říci, že se používá k trvalému zastavení provádění podprocesu.

Příklad

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

Výstup:

  • Join (): Slouží k tomu, aby všechna volající vlákna čekala, dokud aktuální vlákno nedokončí jeho provedení a neskončí.

Příklad:

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

Výstup:

Výhody multithreadingu v C #

  1. Pomáhá udržovat citlivé uživatelské rozhraní: V naší aplikaci máme někdy časově náročnou metodu. V takovém případě, pokud učiníme naši aplikaci vícevláknovou, pak za provedení této metody převezme odpovědnost jiné vlákno, zatímco hlavní vlákno se může zaměřit na schopnost aplikace reagovat. Tím nezmrzne naši aplikaci včasným poskytnutím správné odpovědi uživateli.
  2. Zvyšuje výkon aplikace: Pokud máme tolik vláken, kolik je procesorových jader, každé vlákno se spustí nezávisle a zvyšuje se počet výpočtů za sekundu.
  3. Vlákna minimalizují použití systémových prostředků, protože sdílejí stejný adresní prostor.
  4. Díky tomu je kód zároveň rychlejší a jednodušší.

Závěr - multithreading v C #

Třída vlákna poskytuje mnoho důležitých vlastností, jako jsou Priority, Name, IsAlive, pozadí, které můžeme použít v naší multithreadingové aplikaci. Synchronizace vláken je technika, pomocí které vlákno může získat přístup k prostředku po určitou dobu bez přerušení dalších vláken, dokud nedokončí svou úlohu.

Doporučené články

Toto byl průvodce multithreadingem v C #. Také zde diskutujeme o jejich zavedení, syntaxi, tvorbě a příkladech multithreadingu v c #. Další informace naleznete také v následujících článcích -

  1. Objekty v C #
  2. Destruktor v C #
  3. Destruktor v C #
  4. Dědičnost v C #
  5. Destruktor v PHP | Příklady