A .NET 4 tartalmaz egy új névteret, a System.Threading.Tasks-t, amely olyan osztályokat tartalmaz, amelyek kivonják a szálas funkciókat. Használd a ThreadPool-t a háttérben. A feladat egy egység munkáját jelenti, amelyet el kell fejezni. Ennek az egységnek a munkája külön szálban futtatható, vagy egy feladat szinkronban indítható, ami a fő hangolási szálra várni kell. A feladatok használata nemcsak egy absztrakciós réteget ad, hanem sok irányítást is ad az alapul szolgáló szálak felett. A feladatok nagy rugalmasságot kínálnak a munka ütemezésében. Például definiálhatsz egy folyamatos feladatot – hogy milyen munkát kell végezni egy feladat befejezése után. Ez lehet a különbség a sikeres vagy a sikertelen feladat között. Emellett a feladatok hierarchiában is elrendezhetők. Például egy szülői feladat létrehozhat egy új gyermekfeladatot. Ez függőséget hoz létre, így ha lemondod a szülő feladatot, a gyermekfeladat is törlésre kerül.
Manapság népszerű a feladatvégrehajtási módszerek, amelyek nagy teljesítményűek, és nem tudom, hol van a feladatteljesítmény.
Én magam teszteltem a Task-t és a Thread-et, és úgy érzem, a Task nagyon lassú, ami jelentősen befolyásolja a teljesítményt, a tesztkód pedig a következő:
A módszert 1000-szer körözzük, majd a módszert 100 milliszekundumig blokkoljuk, és a teszteredmény a következő:
Eredmény:
A szál végrehajtása 188 milliszekundumot vesz igénybe
A feladat végrehajtása 14 671 milliszekundumot vesz igénybe
A két sebesség közötti különbség 78-szoros!!
A feladat nagyon lassú, nem tudom, miért történik ez, van valami baj a tesztkódommal, vagy mi? Remélem, el tudod magyarázni, miért történik ez...
|