Párhuzamos programozás a delphi xe7-ben
A Delphi XE7-ben a párhuzamos programozás könyvtárát vezettük be. Használatához csak csatlakoztassa a System.Threading egységet. Lássuk, mi van ebben a könyvtárban és hogyan lehet használni.
A párhuzamos programozási könyvtár (PPL) Windows alatt fut. MacOSX. Android és iOS eszközök, és lehetővé teszi, hogy az alkalmazások futtatásához feladatot párhuzamosan, így előnyeit kihasználó többprocesszoros számítógép vagy eszköz. PPL könyvtár lehetővé teszi, hogy futtatni feladatokat, kombinálják őket, várható teljesítményét a csoport feladatait, és így tovább. Mindehhez a könyvtár automatikusan állítható (attól függően, hogy a CPU terhelés) thread pool (lásd. TThreadPool osztály), amely feledteti a teremtés és flow control.
A PPL könyvtár használatával egyszerűen:
- hozzon létre hurkot a TParallel segítségével.
- párhuzamos feladatokat futtathat a TTask és az ITask használatával;
- dobja el a futási folyamatot, összpontosítva más feladatokra, majd kapja meg a folyamat eredményét a kívánt ponton.
A TTask használata
TTask - egy osztály, amely lehetővé teszi, hogy futtatni egy feladatot vagy több feladatot párhuzamosan. Ebben az esetben nem kell létrehoznia és kezelnie az áramlást. A TTask osztály végrehajtja az ITask felületet. Az interfész iTask az Ön rendelkezésére áll egy funkció indításához (Start), vár (vár) és a Mégse (Cancel) feladatok és állapot (Status), lehetővé teszi, hogy tudja, mi folyik a feladattal. Íme a lehetséges állapotok feladatok: Alkotó (feladat létrehozva), WaitingToRun (feladat vár a végén a végrehajtását egy másik folyamat), futás (a feladatot), Befejezve (feladat befejeződött), WaitingForChildren (feladat vár a végén a végrehajtás a leányvállalat feladata), törölve (a feladat törölték) Kivétel (hiba történt a feladat végrehajtása közben).
Lássuk most, hogyan lehet létrehozni és futtatni egy feladatot. Ehhez hozzon létre egy TTask osztályt. eljuttat egy eljárást az osztályszerkesztőhöz, amelyet a szálon végre fog hajtani, majd hívja a Start funkciót.
Most párhuzamosan próbálkozzunk több feladattal. Ehhez létre kell hoznia egy sor feladatot, feladatokat kell futtatnia, és meg kell várnia, hogy futtassanak. A TTask osztály két statikus függvényt vár a várakozásra. WaitForAll (várjon minden feladatra) és WaitForAny (várjon legalább egy feladatot végrehajtani).
És végül még egy példát mutat be, amelyben megmutatom, hogyan lehet elérni a tulajdonságokat és formázni az ellenőrzéseket egy feladat eljárásából, hogyan ellenőrizheti egy feladat állapotát és hogyan lehet megszüntetni a végrehajtását.
TParallel.For használatával
A statikus funkció A TParallel osztály lehetővé teszi, hogy könnyen végezze el a funkciót párhuzamos hurokban. Példaként tekintse meg az algoritmust a főszámok megtalálásához. Az a függvény, amely meghatározza, hogy a szám elsődleges legyen, a következő lesz:
A számok rendezésének klasszikus tömbje és a megtalált prímszámok számának megfejtése így fog kinézni:
Ebben az esetben a párhuzamos hurok helyettesítheti az utasításhoz a TParallel.For osztály függvényét, és helyettesíti a hurok kódot anonim függvényben.
Most nézzük meg, hogyan lehet megszakítani a TParallel.For hurok. Tegyük fel, hogy legalább 1000 főszámot kell találnunk, majd töröljük a hurkot. Így válik a kódunk.
A TTask.IFuture használata
Az IFuture felület segítségével kiszámíthat valamit, vagy végrehajthat egy lekérdezést, elvégezhet párhuzamosan más feladatokat, és megkaphatja az eredményt, amikor szüksége van rá. Ha ezen a ponton az érték még nincs készen, a kérő szálat az érték beérkezéséig blokkolja. Ez lehetővé teszi, hogy prioritásként kezelje a kód blokkjait, elvégezze őket egy bizonyos sorrendben, és ezzel egyidejűleg győződjön meg róla, hogy az adott értéket egy bizonyos pontban kapja meg.
Tegyünk egy egyszerű példát az IFuture interfész használatára. Először futtasd a feladatot, és próbáld meg azonnal megkapni az értéket. A következő példában a program szünetel, amíg a feladat befejeződik.
És itt van egy példa, amikor egy program eredményre szólít fel, miután a feladat már működött. Ebben az esetben az eredményt azonnal megkapja.
TThreadPool szálösszeköttetés kezelése
A TThreadPool osztály jelenlegi példányát a TThreadPool.Default osztály tulajdonságából szerezheti be. ahonnan számolni lehet, vagy amiből megváltoztathatja a szálak maximális és minimális számát. Ezt a példában láthatja.
Érdemes a Delphi párhuzamos programozási könyvtárat használni?
A kérdésre adott válasz egyértelmű: természetesen. Megnövelheti a meglévő alkalmazások teljesítményét egy önszabályozó szálas medencén keresztül, amely kihasználja a többmagos processzorok előnyeit. Továbbá, ha patakokat használ, a PPL párhuzamos programozási könyvtár csökkenti a kód méretét és javítja olvashatóságát, ami nem örülhet. Különösen érdemes megjegyezni, hogy könnyű a szálak és párhuzamos ciklusok használata.