Kas ir pavedienu baseins? Kāpēc izmantot pavedienu baseinus? Kā lietot pavedienu baseinus?
1. Kas ir diegu baseins?
.NET Framework ThreadPool klase nodrošina pavedienu kopu, ko var izmantot, lai izpildītu uzdevumus, nosūtītu darba vienumus, apstrādātu asinhronu I/O, gaidītu citu pavedienu vārdā un apstrādātu taimeri. Tātad, kas ir pavedienu baseins? Pavedienu kopums faktiski ir "baseins", kas glabā pavedienu objektus, un tas nodrošina dažas pamatmetodes, piemēram, minimālā/maksimālā pavedienu skaita iestatīšanu baseinā, izpildāmo metožu rindu utt. ThreadPool ir statiska klase, tāpēc to var izmantot tieši, neveidojot objektus.
2. Kāpēc izmantot diegu baseinus? Kādas ir priekšrocības?
Microsoft oficiālajā tīmekļa vietnē teikts: Daudzas lietojumprogrammas izveido lielu skaitu pavedienu, kas atrodas miega režīmā, gaidot notikumus. Ir arī daudzi pavedieni, kas var nonākt ziemas guļā, lai periodiski pamostos, lai aptaujātu mainītu vai atjauninātu informāciju par stāvokli. Pavedienu kopas, kas ļauj efektīvāk izmantot pavedienus, izmantojot sistēmas pārvaldīto darbinieku pavedienu kopu.
Vienkārši sakot, katram jaunam pavedienam ir jāaizņem atmiņas vieta un citi resursi, un ar tik daudz jaunu pavedienu, daudzi no tiem ir neaktīvi vai gaida resursu atbrīvošanu. Ir daudzi pavedieni, kas periodiski veic tikai nelielu darbu, piemēram, atsvaidzināt datus utt., Kas ir pārāk izšķērdīgi, lai zīmētu, un reti kad liels skaits pavedienu izplūst faktiskajā programmēšanā un pēc tam beidzas īsā laika periodā. Tāpēc tika ierosināts diegu baseinu jēdziens. Ja lietojumprogramma veic citu pieprasījumu pavedienu kopumam, gaidīšanas stāvoklī esošais pavediens tiek aktivizēts un izpilda uzdevumu, neizveidojot jaunu pavedienu, kas ietaupa daudz pieskaitāmo izdevumu. Sistēma automātiski iznīcinās pavedienus tikai tad, kad pavedienu skaits sasniegs maksimālo pavedienu skaitu. Tāpēc, izmantojot pavedienu baseinus, var izvairīties no lieliem izveides un iznīcināšanas izdevumiem, labāka veiktspēja un stabilitāte, un, otrkārt, izstrādātāji var koncentrēties uz citiem uzdevumiem, nododot pavedienus sistēmas vadībai.
3. Kā es varu izmantot pavedienu baseinus?
Patiesībā pavedienu baseini ir ļoti vienkārši lietojami, šādi
a. Iestatiet maksimālo un minimālo pavedienu kopumu:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Iestatiet pieprasījumu skaitu pavedienu kopumam, kas var būt aktīvs vienlaikus. Visi pieprasījumi, kas lielāki par šo skaitu, paliks rindā, līdz pavedienu pūla pavediens kļūs pieejams. Varat arī iestatīt minimālo pavedienu skaitu.
b. Pievienojiet uzdevumus pavedienu kopumam:
ThreadPool.QueueUserWorkItem(jauns WaitCallback(metodes nosaukums));
vai ThreadPool.QueueUserWorkItem(jauns WaitCallback(metodes nosaukums), parametrs);
Piemēram, ja ne vairāk kā 5 pavedieni pavedienu baseinā izpilda metodi 60 reizes, kopējā alga 5 gadiem ir šāda:
Ja neizmantojat pavedienu apvienošanu, iespējams, būs jāatver 60 pavedieni, lai asinhroni izpildītu Run() metodi, kas ir vietas resursu izšķiešana. Tagad mēs izmantojam līdz 5 pavedieniem, kurus var izpildīt 1 sekundē, un efektivitāte un veiktspēja ir ļoti laba.
|