Увод у мултитхреадинг у Ц #

Да бисмо разумели мултитхреадинг у ц #, прво да разумемо шта је нит?

  • Конац је лаган процес.
  • То је пут извођења програма.
  • То је најмања јединица за обраду у оперативном систему.
  • Према томе, процес може имати више нити.

Дакле, мултитхреадинг је процес који садржи више нити у којима свака нит обавља различиту активност. То штеди вријеме јер се више задатака истовремено извршавају од стране различитих нити. Повећава употребу процесора и повећава ефикасност апликације. Ово делује на концепту поделе времена.

Синтакса са објашњењем

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

Да бисмо креирали нит, морамо да створимо објект класе Тхреад. Конструктор класе Тхреад односи се на ТхреадСтарт. ТхреадСтарт је делегат који представља методу коју треба извршити када нит започне извршавање.

Конац започиње извршење када се позове метода Старт ().

Можемо створити нит без употребе делегата ТхреадСтарт као што је приказано у синтакси испод:

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

Креирање више нити у Ц #

Да бисмо створили нити, морамо да увеземо систем.Треброј имена простора. Можемо креирати и иницијализовати нити помоћу класе Тхреад.

Пример употребе класе нити

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

Излаз:

Пример помоћу ТхреадСтарт делегата

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

Излаз:

Напомена: Није неопходно да методе коришћене у мултитхреадингу буду статичне као у претходна два примера, обе методе, тј. Метход1 и Метход2 су статичне. Ове методе могу бити несталне и у том случају прво морамо креирати објект класе који садржи методе, а затим приступити методама помоћу објекта.

У Ц # програму увек садржи једну нит, тј. Главну нит. Када креирамо друге нити, то постаје програм за мултитхреадинг и у Ц # мултитхреадинг постоје две врсте нити:

  • Предња нит: Ова нит наставља да се извршава све док не заврши са радом чак и ако се главна нит прекине.
  • Позадинска нит: Када се главна нит прекине, позадинска нит такође престаје да се извршава и завршава главном нитом.

Методе са примерима

Погледајмо неке најчешће коришћене методе класе Тхреад са примерима.

  • Слееп (): Користи се за паузирање извршења тренутне нити током одређеног временског периода, тако да остале нити започињу извршење.

Пример:

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

Излаз:

Излаз показује да су оба навоја изведена паралелно.

  • Прекини (): Користи се за завршетак нити или можемо рећи да се трајно зауставља извршење нити.

Пример

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

Излаз:

  • Јоин (): Користи се за позивање свих позива позива да причекају док тренутна нит доврши извршење и заврши.

Пример:

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

Излаз:

Предности Мултитхреадинг-а у Ц #

  1. Помаже у одржавању респонзивног корисничког интерфејса: Понекад у нашој апликацији имамо дуготрајан метод. У том случају, ако нашу апликацију направимо на више навоја, онда друга нит преузима одговорност за извршавање те методе, док се главна нит може фокусирати на одзив апликације. На тај начин неће замрзнути нашу апликацију благовремено пруживши одговарајући одговор кориснику.
  2. Повећава перформансе апликације: Ако имамо толико нити колико има језгара процесора, сваки ће се низ покренути независно повећавајући број израчуна у секунди.
  3. Нити минимизирају употребу ресурса система јер дијеле исти адресни простор.
  4. То чини код истовремено и бржим и једноставнијим.

Закључак - Мултитхреадинг у Ц #

Класа навоја пружа многа важна својства као што су Приорити, Наме, ИсАливе, позадина коју можемо користити у нашој мултитхреадинг апликацији. Синхронизација нити је техника којом нит може приступити ресурсу за одређено време без прекида других нити док не испуни свој задатак.

Препоручени чланци

Ово је водич за Мултитхреадинг у Ц #. Овде такође расправљамо о њиховом увођењу, синтакси, стварању и примерима вишеслојног читања у ц #. Можда ћете такође погледати следеће чланке да бисте сазнали више -

  1. Објекти у Ц #
  2. Деструктор у Ц #
  3. Деструктор у Ц #
  4. Наслеђивање у Ц #
  5. Деструктор у ПХП-у | Примери

Категорија: