Čo je to thread pool? Prečo používať thread pools? Ako používať thread pooly?
1. Čo je to pool vlákien?
Trieda ThreadPool v .NET Frameworku poskytuje pool vlákien, ktorý možno použiť na vykonávanie úloh, odosielanie pracovných položiek, spracovanie asynchrónnych I/O, čakanie v mene iných vlákien a spracovanie časovačov. Čo je to teda thread pool? Pool vlákien je vlastne "pool", ktorý ukladá objekty vlákien a poskytuje niektoré základné metódy, ako je nastavenie minimálneho/maximálneho počtu vlákien v poole, zaradenie metód na vykonanie a podobne. ThreadPool je statická trieda, takže ju možno používať priamo bez vytvárania objektov.
2. Prečo používať vláknové pooly? Aké sú výhody?
Oficiálna webová stránka Microsoftu uvádza nasledovné: Mnohé aplikácie vytvárajú veľké množstvo vlákien, ktoré sú neaktívne a čakajú na udalosti. Existuje tiež veľa vlákien, ktoré môžu ísť do hibernácie len preto, aby sa pravidelne zobudili a zisťovali informácie o zmenenom alebo aktualizovanom stave. Pooly vlákien, ktoré umožňujú efektívnejšie využívať vlákna cez pool pracovných vlákien spravovaných systémom.
Jednoducho povedané, každé nové vlákno musí zaberať pamäťový priestor a ďalšie zdroje, a s toľkými novými vláknami sú mnohé z nich neaktívne alebo čakajú na uvoľnenie zdrojov. Existuje mnoho vlákien, ktoré robia len občasnú malú prácu, ako je obnovovanie dát a podobne, čo je príliš plytvajúce na kreslenie, a je zriedkavé, aby veľké množstvo vlákien vybuchlo v skutočnom programovaní a skončilo v krátkom čase. Preto bol navrhnutý koncept thread pools. Ak aplikácia vykoná ďalšiu požiadavku do poolu vlákien, vlákno v čakajúcom stave sa aktivuje a vykoná úlohu bez vytvorenia nového vlákna, čo ušetrí veľa režijných nákladov. Systém automaticky zničí vlákna len vtedy, keď počet vlákien dosiahne maximálny počet. Preto používanie thread poolov môže zabrániť vysokým nákladom na vytváranie a ničenie, mať lepší výkon a stabilitu, a po druhé, vývojári sa môžu sústrediť na iné úlohy odovzdaním vlákien systémovému manažmentu.
3. Ako používať thread pools?
V skutočnosti sú vláknové pooly veľmi jednoduché na používanie, a to nasledovne
a. Nastavte maximálny a minimálny pool vlákien:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Nastavte počet požiadaviek pre pool vlákien, ktoré môžu byť aktívne súčasne. Všetky požiadavky s vyšším ako týmto číslom zostanú v rade, kým vlákno poolu vlákien nebude dostupné. Môžete si tiež nastaviť minimálny počet vlákien.
b. Pridať úlohy do poolu vlákien:
ThreadPool.QueueUserWorkItem(nový WaitCallback(názov metódy));
alebo ThreadPool.QueueUserWorkItem(nový WaitCallback(názov metódy), parameter);
Napríklad, ak maximálne 5 vlákien v poole vlákien vykoná metódu 60-krát, celkový plat za 5 rokov je nasledovný:
Ak nepoužívate pooling vlákien, možno budete musieť otvoriť 60 vlákien, aby ste mohli vykonať metódu Run() asynchrónne, čo je plytvanie miestom. Teraz používame až 5 vlákien, ktoré sa dajú spustiť za 1 sekundu, a efektivita aj výkon sú veľmi dobré.
|