Johdanto monisäikeisiin C #
Ymmärtääksesi monisäikeisyyttä c #: ssä, ymmärrämme ensin, mikä on säie?
- Lanka on kevyt prosessi.
- Se on ohjelman suorituspolku.
- Se on käyttöjärjestelmän pienin käsittelyyksikkö.
- Siten prosessissa voi olla useita säikeitä.
Joten, monisäikeinen on prosessi, joka sisältää useita ketjuja, joissa kukin säie suorittaa erilaisen toiminnan. Se säästää aikaa, koska useita ketjuja suorittaa useita tehtäviä samanaikaisesti. Se lisää prosessorin käyttöä ja parantaa sovelluksen tehokkuutta. Tämä toimii ajankäyttökonseptin kanssa.
Syntaksi selityksen kanssa
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();
Langan luomiseksi meidän on luotava ketjuluokan objekti. Thread luokan rakentaja viittaa ThreadStart. ThreadStart on edustaja, joka edustaa menetelmää, joka on suoritettava, kun säie aloittaa suorituksen.
Lanka aloittaa suorituksen, kun Start () -menetelmää kutsutaan.
Voimme luoda säiettä käyttämättä ThreadStart-edustajaa alla olevan syntaksin osoittamalla tavalla:
Thread thread_name = new Thread(method_to_be_executed);
thread_name.Start();
Useiden ketjujen luominen C #: ssa
Lankojen luomiseksi meidän on tuotava järjestelmä.Neveyttävä nimitila. Voimme luoda ja alustaa ketjut ketjuluokan avulla.
Esimerkki lankaluokan avulla
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();
)
)
lähtö:
Esimerkki käyttämällä ThreadStart-edustajaa
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();
)
)
lähtö:
Huomaa: Ei ole välttämätöntä, että monisäikeistämisessä käytettyjen menetelmien on oltava staattisia, kuten kahdessa edellä olevassa esimerkissä, sekä menetelmät eli menetelmä1 ja menetelmä2 ovat staattisia. Nämä menetelmät voivat olla epästaattisia, ja siinä tapauksessa meidän on ensin luotava luokan objekti, joka sisältää menetelmiä, ja sitten päästä menetelmiin objektin avulla.C #: ssa ohjelma sisältää aina yhden säikeen eli pääkierteen. Kun luot muita ketjuja, siitä tulee monisäikeinen ohjelma, ja C #: n monisäikeisissä ketjuissa on kahta tyyppiä:
- Etualan säie : Tämä säie jatkaa suorittamista, kunnes se on saanut työnsä päätökseen, vaikka päälanka loppuu.
- Taustalanka : Kun päälanka loppuu, taustalanka myös pysähtyy suorittamisen ja päättyy päälangan kanssa.
Menetelmät esimerkein
Katsotaanpa joitain yleisesti käytettyjä ketjuluokan menetelmiä ja esimerkkejä.
- Sleep (): Käytetään keskeyttämään nykyisen säikeen suorittaminen tietyn ajanjakson ajan siten, että muut ketjut alkavat suorittaa.
Esimerkki:
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();
)
)
lähtö:
Tulos osoittaa, että molemmat langat suoritettiin rinnakkain.
- Keskeytä (): Käytetään lopettamaan lanka tai voidaan sanoa, että sitä käytetään loppumaan langan suorittaminen pysyvästi.
esimerkki
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());
)
)
)
lähtö:
- Liity (): Käytetään kaikkien kutsuvien ketjujen odottamiseen, kunnes nykyinen ketju suorittaa loppuun suorituksen ja päättyy.
Esimerkki:
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();
)
)
lähtö:
Monisäikeilyn edut C #: ssä
- Auttaa ylläpitämään käyttöliittymää: Joskus sovelluksessamme on aikaa vievä menetelmä. Jos teemme sovelluksestasi monisäikeisen, niin toinen säie ottaa vastuun kyseisen menetelmän suorittamisesta, kun taas Päälanka voi keskittyä sovelluksen reagoivuuteen. Siten se ei jäädyytä sovelluksemme antamalla oikea-aikainen vastaus käyttäjälle.
- Lisää sovelluksen suorituskykyä: Jos meillä on niin paljon ketjuja kuin prosessorin ytimiä, niin jokainen säie toimii toisistaan riippumatta ja lisää laskelmien määrää sekunnissa.
- Ketjut minimoivat järjestelmäresurssien käytön, koska niillä on sama osoitetila.
- Se tekee koodista sekä nopeamman että yksinkertaisemman samanaikaisesti.
Johtopäätös - monisäikeinen C #: ssä
Ketjuluokassa on monia tärkeitä ominaisuuksia, kuten Priority, Name, IsAlive, tausta, jota voimme käyttää monisäikeisessä sovelluksessamme. Ketjujen synkronointi on tekniikka, jolla säie voi käyttää resurssia tietyn ajan keskeytymättä muihin ketjuihin, kunnes se suorittaa tehtävänsä.
Suositellut artikkelit
Tämä on opas monisäikeisiin C # -tapahtumiin. Tässä keskustellaan myös niiden johdannosta, syntaksista, luomisesta ja esimerkkeistä monisäikeisestä c #: ssä. Saatat myös katsoa seuraavia artikkeleita saadaksesi lisätietoja -
- Objektit C #: ssä
- Tuhoaja C #: ssä
- Tuhoaja C #: ssä
- Perintö C #: ssä
- Tuhoaja PHP: ssä | esimerkit