logo

Užduotis prieš giją C#

Įvadas:

Asinchroninis programavimas tapo populiaria šiuolaikinės programinės įrangos kūrimo tendencija. Yra du dažniausiai naudojami asinchroninio programavimo būdai C# Užduotys ir Siūlai . Tačiau daugelis kūrėjų yra sumišę dėl skirtumų tarp Užduotys ir Siūlai ir kada naudoti kiekvieną iš jų. Šiame straipsnyje pamatysime esamus skirtumus Užduotys ir Siūlai C# ir pateikite gaires, kada naudoti kiekvieną iš jų.

Kas yra Užduotys?

C# kalboje užduotis yra aukštesnio lygio abstrakcija, skirta asinchroniškai paleisti kodą. Užduotis žymi darbo vienetą, kurį reikia atlikti asinchroniškai, ir jis gali grąžinti reikšmę arba ne. Užduotis paprastai sukuriama naudojant Užduotis Gamyklos klasė , kuriame pateikiami keli užduočių kūrimo ir vykdymo būdai.

Užduotys naudoja a Siūlų baseinas atlikti savo darbą, o tai reiškia, kad užduotys vykdomos vienoje iš gijų Siūlų baseinas. Kai sukuriama užduotis, ji pridedama prie Siūlų baseino eilė , o viena iš telkinio gijų naudojama užduočiai vykdyti. Kai užduotis bus baigta, gija grįžta į telkinį, paruošta naudoti kitai užduočiai.

Užduotys turi keletą pranašumų, palyginti su gijomis:

  • Užduotys yra lengvesnės nei gijos. Užduotys naudoja mažiau sistemos išteklių, pvz., atminties ir procesoriaus laiko, palyginti su gijomis.
  • Užduotis lengviau valdyti nei gijas. Užduotys suteikia aukštesnio lygio abstrakciją asinchroniniam programavimui, todėl lengviau rašyti ir prižiūrėti kodą.
  • Tam tikrose situacijose užduotys taip pat gali užtikrinti geresnį našumą nei gijos. Taip yra todėl, kad Tasks naudoja a Siūlų baseinas , kuri gali tvarkyti gijas efektyviau nei kurti ir naikinti gijas kiekvienam darbo vienetui.

Kas yra gijos?

C# kalboje Thread yra žemesnio lygio abstrakcija, skirta asinchroniškai paleisti kodą. Thread reiškia operacinės sistemos lygio konstrukciją, kuri naudojama kodui vykdyti asinchroniškai. Sriegis gali grąžinti arba nepateikti reikšmės ir paprastai sukuriamas naudojant Siūlų klasė .

Gijos naudoja savo išteklius, pvz., atmintį ir procesoriaus laiką, ir paprastai jas sukuria ir sunaikina kūrėjas. Sukūrus giją, ji iškart pradedama vykdyti ir vykdoma tol, kol ji aiškiai sustabdoma arba baigia savo darbą.

Gijos turi keletą trūkumų, palyginti su užduotimis:

  • Gijos sunkesnės nei užduotys. Gijos naudoja daugiau sistemos išteklių, pvz., atminties ir procesoriaus laiko, palyginti su užduotimis.
  • Gijas tvarkyti sunkiau nei užduotis. Gijos reikalauja žemesnio lygio programavimo ir sinchronizavimo, todėl sunkiau rašyti ir prižiūrėti kodą.
  • Tam tikrose situacijose gijos taip pat gali būti prastesnės nei užduotys. Taip yra todėl, kad kiekvieno darbo vieneto gijų kūrimas ir naikinimas gali būti neefektyvus, ypač kai reikia atlikti daug darbo vienetų.

Kada naudoti užduotis:

Užduotys rekomenduojamos, kai norite atlikti darbo vienetą asinchroniškai ir jums nereikia tiksliai kontroliuoti vykdymo. Užduotys puikiai tinka atlikti nedidelius ir trumpalaikius darbo vienetus, tokius kaip I/O operacijos ar paprasti skaičiavimai.

Užduotys taip pat rekomenduojamos, kai norite pasinaudoti a Siūlų baseinas . A Siūlų baseinas gali tvarkyti gijas efektyviau nei kurti ir naikinti gijas kiekvienam darbo vienetui. Tai gali pagerinti našumą, ypač kai reikia atlikti daug darbo vienetų.

Užduotys taip pat naudingos, kai norite sujungti asinchronines operacijas. Užduotys gali būti derinamos naudojant laukimo operatorių, kad būtų sukurta asinchroninių operacijų, kurios vykdomos viena po kitos, grandinė. Tai gali būti svarbu, kai norite atlikti daugybę priklausomų asinchroninių operacijų.

Kada naudoti gijas:

C# gijos turėtų būti naudojamos, kai reikia tiksliai kontroliuoti vykdymą ir kai turite konkrečių reikalavimų, kurių negalima patenkinti naudojant aukštesnio lygio abstrakcijas, kurias teikia Tasks. Štai keletas situacijų, kai gijos gali būti geresnis pasirinkimas:

Ilgaamžiai darbo vienetai:

Gijos geriau tinka ilgalaikiams darbo vienetams, pvz., foninėms paslaugoms arba sudėtingiems skaičiavimams, kuriems reikia labiau kontroliuoti vykdymą. Tokiais atvejais dažnai reikia kontroliuoti kodo vykdymą tiksliau nei tai, ką numato užduotys.

Smulki sriegio vykdymo kontrolė:

Siūlai leidžia nustatyti Gijų prioritetai, gijų sinchronizavimas , ir Siūlas nutrūksta . Jei reikia tinkinti kodo vykdymą, Threads suteikia žemo lygio sąsają, kuri leidžia tai padaryti.

Žemo lygio programavimas:

Java inicijavimo masyvas

Gijos reikalauja žemesnio lygio programavimo ir sinchronizavimo, o tai gali būti naudinga, jei turite specialių reikalavimų, kurių neįmanoma patenkinti naudojant aukštesnio lygio abstrakcijas, kurias teikia Tasks.

Sąveika su nevaldomu kodu:

Jei reikia bendradarbiauti su nevaldomu kodu, gijos gali būti vienintelė galimybė. Tokiais atvejais gali tekti kurti ir valdyti gijas rankiniu būdu, kad įsitikintumėte, jog jūsų kodas tinkamai veikia su nevaldomu kodu.

Našumo aspektai:

Kai kuriose situacijose kiekvieno darbo vieneto gijų kūrimas ir naikinimas gali būti neefektyvus, ypač kai reikia atlikti daug darbo vienetų. Tokiais atvejais gijų naudojimas gali būti geresnis pasirinkimas, nes juos galima pakartotinai naudoti atliekant kelis darbo vienetus.