Úvod do multithreadingu v jazyku C #

Aby sme porozumeli multithreadingu v jazyku C #, najprv pochopme, čo je vlákno?

  • Niť je proces s nízkou hmotnosťou.
  • Je to cesta vykonávania programu.
  • Je to najmenšia jednotka spracovania v operačnom systéme.
  • Proces teda môže mať viac vlákien.

Viacvláknové spracovanie je proces, ktorý obsahuje viac vlákien, pričom každé vlákno vykonáva inú aktivitu. Šetrí to čas, pretože viacero úloh sa vykonáva súčasne v rôznych vláknach. Zvyšuje využitie CPU a zvyšuje účinnosť aplikácie. Toto pracuje na koncepcii zdieľania času.

Syntax s vysvetlení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();

Ak chcete vytvoriť vlákno, musíme vytvoriť objekt triedy vlákna. Konštruktor triedy Thread sa odvoláva na ThreadStart. ThreadStart je delegát, ktorý predstavuje metódu, ktorá sa musí vykonať, keď sa vlákno začne vykonávať.

Vlákno začne vykonávať, keď sa volá metóda Start ().

Môžeme vytvoriť vlákno bez použitia delegáta ThreadStart, ako je uvedené v syntaxi nižšie:

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

Vytváranie viacerých vlákien v jazyku C #

Aby sme mohli vytvoriť vlákna, musíme importovať namespace system.Threading. Môžeme vytvárať a inicializovať vlákna pomocou triedy vlákien.

Príklad použitia triedy 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ýkon:

Príklad použitia 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ýkon:

Poznámka: Nie je potrebné, aby metódy použité vo viacvláknovej výrobe boli statické, ako v predchádzajúcich dvoch príkladoch, a to ako metódy, tj metóda 1, tak metóda 2 sú statické. Tieto metódy môžu byť nestatické a v takom prípade musíme najskôr vytvoriť objekt metód obsahujúcich triedu a potom pristupovať k metódam pomocou objektu.

V C # program vždy obsahuje jedno vlákno, tj hlavné vlákno. Keď vytvárame ďalšie vlákna, stáva sa z nich viacvláknový program a v C # multithreadingu existujú dva typy vlákien:

  • Vlákno v popredí : Toto vlákno pokračuje vo vykonávaní, kým nedokončí svoju prácu, aj keď sa ukončí hlavné vlákno.
  • Vlákno na pozadí : Keď sa ukončí hlavné vlákno, vlákno na pozadí tiež zastaví vykonávanie a ukončí sa s hlavným vláknom.

Metódy s príkladmi

Pozrime sa na niektoré bežne používané metódy triedy vlákien s príkladmi.

  • Sleep (): Používa sa na pozastavenie vykonávania aktuálneho vlákna na určité časové obdobie, aby sa mohli spustiť ďalšie vlákna.

Prí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ýkon:

Výstup ukazuje, že obidva vlákna prebiehajú paralelne.

  • Abort (): Používa sa na ukončenie vlákna alebo môžeme povedať, že sa používa na trvalé zastavenie vykonávania vlákna.

prí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ýkon:

  • Join (): Používa sa na to, aby všetky volacie vlákna čakali, kým aktuálne vlákno dokončí jeho vykonanie a neskončí sa.

Prí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ýkon:

Výhody multithreadingu v C #

  1. Pomáha udržiavať citlivé používateľské rozhranie: V našej aplikácii niekedy máme časovo náročnú metódu. V takom prípade, ak urobíme našu aplikáciu viacvláknovou, potom ďalšie vlákno prevezme zodpovednosť za vykonanie tejto metódy, zatiaľ čo hlavné vlákno sa môže zamerať na odozvu aplikácie. Preto nezmrazí našu aplikáciu včasným poskytnutím správnej odpovede používateľovi.
  2. Zvyšuje výkon aplikácie: Ak máme toľko vlákien, koľko je jadier procesora, každé vlákno sa spustí nezávisle, čím sa zvýši počet výpočtov za sekundu.
  3. Vlákna minimalizujú použitie systémových prostriedkov, pretože zdieľajú rovnaký adresný priestor.
  4. Zrýchľuje a zjednodušuje kód súčasne.

Záver - multithreading v jazyku C #

Vlákno triedy poskytuje mnoho dôležitých vlastností, ako sú Priority, Meno, IsAlive, pozadie, ktoré môžeme použiť v našej multithreadingovej aplikácii. Synchronizácia vlákien je technika, pomocou ktorej vlákno môže získať prístup k prostriedku na určitý čas bez prerušenia iných vlákien, kým nedokončí svoju úlohu.

Odporúčané články

Toto bol sprievodca multithreadingom v jazyku C #. Ďalej diskutujeme o ich zavedení, syntaxi, vytvorení a príkladoch multithreadingu v c #. Ak sa chcete dozvedieť viac, môžete si pozrieť aj nasledujúce články -

  1. Objekty v C #
  2. Destruktor v C #
  3. Destruktor v C #
  4. Dedičnosť v C #
  5. Destruktor v PHP | Príklady

Kategórie: