Mi az a szál pool? Miért használunk szálas medencéket? Hogyan lehet használni a szálakat a medencéket?
1. Mi az a szál pool?
A .NET Framework ThreadPool osztálya egy szálkészletet biztosít, amellyel feladatokat lehet végrehajtani, munkaelemek küldésére használni, aszinkron I/O kezelésére, más szálak megbízására várakozni, és időzítők kezelésére. Szóval mi az a szál pool? A szálpool valójában egy "pool", amely tárolja a szálobjektumokat, és néhány alapvető módszert kínál, például a poolban lévő szálok minimális/maximális számának beállítását, a futtatandó metódusok sorba állítását, stb. A ThreadPool statikus osztály, így közvetlenül használható objektumok létrehozása nélkül.
2. Miért használunk szálmedencét? Mik az előnyei?
A Microsoft hivatalos weboldala a következőket mondja: Sok alkalmazás sok szálat hoz létre, amelyek aludnak, várva az eseményekre. Sok szál is előfordulhat, hogy hibernációba kerülhet, csak hogy időnként felébredjenek, és megváltozott vagy frissített állapotinformációkat keressenek. Thread poolok, amelyek lehetővé teszik, hogy hatékonyabban használd a szálakat a rendszer által kezelt munkafonalmok keretében.
Egyszerűen fogalmazva, minden új szálnak memóriateret és egyéb erőforrásokat kell elfoglalnia, és ennyi új szál miatt sok van vagy szunnyadó vagy várja az erőforrások megjelenését. Sok szál csak időnként végez kisebb munkát, például adatfrissítést stb., amelyek túl pazarló a rajzoláshoz, és ritka, hogy sok szál tör ki a tényleges programozásban, majd rövid idő alatt véget ér. Ezért javasolták a szálpoolok fogalmát. Ha az alkalmazás újabb kérést tesz a szál poolhoz, a függőben lévő szál aktiválódik, és végrehajtja a feladatot anélkül, hogy új szálat hozna létre, ami sok költséget takarít meg. A rendszer automatikusan megsemmisíti a szálakat, amikor a szálak száma eléri a maximális szálszámot. Ezért a szálpoolok használata elkerülheti a nagy létrehozási és megsemmisítési költségeket, jobb teljesítményt és stabilitást biztosít, másodszor pedig a fejlesztők más feladatokra koncentrálhatnak, és átadhatják a szálakat a rendszermenedzsmentnek.
3. Hogyan használom a szálakat a medencéket?
Valójában a szál poolok használata nagyon egyszerű, alábbiak szerint
a. Állítsuk be a maximális és minimális szálkészletet:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Állítsuk be a kérések számát egy egyszerre aktív szálkészlethez. Minden ilyen számnál nagyobb kérés sorban marad, amíg a thread pool szál elérhetővé nem válik. Be is állíthatod a minimális szálszámot.
b. Feladatok hozzáadása a szálkészlethez:
ThreadPool.QueueUserWorkItem(új WaitCallback(metódus név));
vagy ThreadPool.QueueUserWorkItem(új WaitCallback(metódusnév), paraméter);
Például, ha a szál poolban legfeljebb 5 szál hajt végre egy módszert 60-szor, akkor az 5 év teljes fizetése a következő:
Ha nem használod a thread poolinget, lehet, hogy 60 szálat kell nyitnod ahhoz, hogy aszinkron módon végrehajtsd a Run() metódusot, ami helyes erőforrás-pazarlás. Most akár 5 szálat is használunk, amelyeket 1 másodperc alatt lehet végrehajtani, és a hatékonyság és a teljesítmény nagyon jó.
|