Ievads:
Asinhronā programmēšana ir kļuvusi par populāru tendenci mūsdienu programmatūras izstrādē. Divas plaši izmantotas asinhronās programmēšanas metodes C # ir Uzdevumi un Pavedieni . Tomēr daudzi izstrādātāji ir neizpratnē par atšķirībām starp Uzdevumi un Pavedieni un kad katru no tiem izmantot. Šajā rakstā mēs redzēsim esošās atšķirības Uzdevumi un Pavedieni C# valodā un sniedziet norādījumus par to, kad izmantot katru no tiem.
Kas ir uzdevumi?
C# valodā uzdevums ir augstāka līmeņa abstrakcija koda asinhronai palaišanai. Uzdevums apzīmē darba vienību, kas jāizpilda asinhroni, un tas var vai nevar atgriezt vērtību. Uzdevums parasti tiek izveidots, izmantojot Uzdevums Rūpnīcas klase , kas nodrošina vairākas metodes uzdevumu izveidei un izpildei.
Uzdevumos izmanto a Vītņu baseins lai izpildītu savu darbu, kas nozīmē, ka uzdevumi tiek izpildīti vienā no pavedieniem Vītņu baseins. Kad uzdevums ir izveidots, tas tiek pievienots Pavedienu baseina rinda , un uzdevuma izpildei tiek izmantots viens no pūla pavedieniem. Kad uzdevums ir pabeigts, pavediens atgriežas pūlā, gatavs izmantošanai citam uzdevumam.
Uzdevumiem ir vairākas priekšrocības salīdzinājumā ar pavedieniem:
- Uzdevumi ir vieglāki nekā pavedieni. Uzdevumi izmanto mazāk sistēmas resursu, piemēram, atmiņas un CPU laika, salīdzinot ar Threads.
- Uzdevumus ir vieglāk pārvaldīt nekā Threads. Uzdevumi nodrošina augstāka līmeņa abstrakciju asinhronai programmēšanai, kas atvieglo koda rakstīšanu un uzturēšanu.
- Noteiktās situācijās uzdevumi var arī nodrošināt labāku veiktspēju nekā pavedieni. Tas ir tāpēc, ka uzdevumi izmanto a Vītņu baseins , kas var pārvaldīt pavedienus efektīvāk nekā izveidot un iznīcināt pavedienus katrai darba vienībai.
Kas ir pavedieni?
C# valodā pavediens ir zemāka līmeņa abstrakcija koda asinhronai palaišanai. Pavediens ir operētājsistēmas līmeņa konstrukcija, kas tiek izmantota koda asinhronai izpildei. Pavediens var vai nevar atgriezt vērtību, un tas parasti tiek izveidots, izmantojot Vītnes klase .
Pavedieni izmanto savus resursus, piemēram, atmiņu un CPU laiku, un tos parasti tieši izveido un iznīcina izstrādātājs. Kad pavediens ir izveidots, tas nekavējoties sāk izpildīt un turpina izpildīt, līdz tas tiek nepārprotami apturēts vai pabeidz savu darbu.
Pavedieniem ir vairāki trūkumi, salīdzinot ar uzdevumiem:
- Pavedieni ir smagāki par uzdevumiem. Pavedieni izmanto vairāk sistēmas resursu, piemēram, atmiņas un CPU laika, salīdzinot ar uzdevumiem.
- Pavedienus ir grūtāk pārvaldīt nekā uzdevumus. Pavedieniem ir nepieciešama zemāka līmeņa programmēšana un sinhronizācija, kas apgrūtina koda rakstīšanu un uzturēšanu.
- Noteiktās situācijās pavedieni var nodrošināt sliktāku veiktspēju nekā uzdevumi. Tas ir tāpēc, ka pavedienu izveide un iznīcināšana katrai darba vienībai var būt neefektīva, it īpaši, ja izpildāmās darba vienības ir daudz.
Kad izmantot uzdevumus:
Uzdevumi ir ieteicami, ja vēlaties veikt darba vienību asinhroni un jums nav nepieciešama precīza izpildes kontrole. Uzdevumi ir lieliski piemēroti nelielu un īslaicīgu darba vienību izpildei, piemēram, I/O operācijām vai vienkāršiem aprēķiniem.
Uzdevumi ir ieteicami arī tad, ja vēlaties izmantot priekšrocības, ko sniedz a Vītņu baseins . A Vītņu baseins var pārvaldīt pavedienus efektīvāk nekā izveidot un iznīcināt pavedienus katrai darba vienībai. Tas var nodrošināt labāku veiktspēju, it īpaši, ja ir jāveic daudzas darba vienības.
Uzdevumi ir noderīgi arī tad, ja vēlaties savienot asinhronās darbības. Uzdevumus var apvienot, izmantojot gaidīšanas operatoru, lai izveidotu asinhronu darbību ķēdi, kas tiek izpildītas viena pēc otras. Tas var būt svarīgi, ja vēlaties veikt virkni atkarīgu asinhronu darbību.
Kad lietot pavedienus:
Pavedieni valodā C# ir jāizmanto, ja jums ir nepieciešama precīza izpildes kontrole un ja jums ir īpašas prasības, kuras nevar izpildīt ar augstāka līmeņa abstrakcijām, ko nodrošina uzdevumi. Tālāk ir norādītas dažas situācijas, kurās pavedieni var būt labāka izvēle.
Ilgmūžīgas darba vienības:
Pavedieni ir labāk piemēroti ilgstošām darba vienībām, piemēram, fona pakalpojumiem vai sarežģītiem aprēķiniem, kuru izpildei nepieciešama lielāka kontrole. Šādos gadījumos bieži vien ir nepieciešams kontrolēt koda izpildi precīzāk nekā tas, ko nodrošina uzdevumi.
Smalka vītnes izpildes kontrole:
Vītnes ļauj iestatīt Pavedienu prioritātes, pavedienu sinhronizācija , un Pavediens tiek pārtraukts . Ja jums ir jāpielāgo koda izpilde, Threads nodrošina zema līmeņa saskarni, kas ļauj to izdarīt.
Zema līmeņa programmēšana:
topoloģijas
Pavedieniem ir nepieciešama zemāka līmeņa programmēšana un sinhronizācija, kas var būt noderīga, ja jums ir īpašas prasības, kuras nevar izpildīt ar augstāka līmeņa abstrakcijām, ko nodrošina Tasks.
Sadarbība ar nepārvaldītu kodu:
Ja jums ir jāsadarbojas ar nepārvaldītu kodu, vienīgā iespēja var būt pavedieni. Šādos gadījumos, iespējams, jums būs manuāli jāizveido un jāvada pavedieni, lai nodrošinātu, ka kods darbojas pareizi ar nepārvaldītu kodu.
Veiktspējas apsvērumi:
Dažās situācijās pavedienu izveide un iznīcināšana katrai darba vienībai var būt neefektīva, it īpaši, ja ir jāveic daudzas darba vienības. Šādos gadījumos pavedienu izmantošana var būt labāka izvēle, jo tos var atkārtoti izmantot vairākām darba vienībām.