.NET 4 sisältää uuden nimiavaruuden, System.Threading.Tasks, joka sisältää luokkia, jotka abstrahoivat säikeyttämisen toiminnallisuuden. Käytä ThreadPoolia taustalla. Tehtävä edustaa yksikön työtä, joka tulisi suorittaa. Tämän yksikön työ voidaan suorittaa erillisessä säikeessä tai tehtävä voidaan käynnistää synkronisesti, mikä vaatii päävirityssäikeen odottamista. Tehtävien käyttö ei ainoastaan anna abstraktiokerroksen, vaan myös paljon hallintaa taustalla oleviin säikeisiin. Tehtävät tarjoavat paljon joustavuutta työn aikatauluttamisessa. Esimerkiksi voit määritellä jatkuvan tehtävän – mitä työtä tulisi tehdä tehtävän valmistuttua. Tämä voi ratkaista onnistuneen tehtävän vai ei-onnistumisen. Lisäksi tehtävät voidaan järjestää hierarkiaan. Esimerkiksi vanhempi tehtävä voi luoda uuden lapsitehtävän. Tämä luo riippuvuuden, joten jos peruutat vanhemman tehtävän, myös sen lapsitehtävä perutaan.
Nykyään on suosittua käyttää tehtävien suoritusmenetelmiä, ja ne ovat erittäin suorituskykyisiä, enkä tiedä missä tehtävien suorituskyky on.
Testasin itse Taskia ja Threadia, ja mielestäni Task on hyvin hidas, mikä vaikuttaa suuresti suorituskykyyn, ja testikoodi on seuraava:
Käymme menetelmän läpi 1000 kertaa, ja sitten menetelmä blokkaa 100 millisekuntia, ja testitulos on seuraava:
Tulos:
Säikeen suoritus kestää 188 millisekuntia
Tehtävien suorittaminen kestää 14 671 millisekuntia
Nopeusero näiden välillä on 78-kertainen!!
Tehtävä etenee hyvin hitaasti, en tiedä miksi näin tapahtuu, onko testikoodissani jotain vikaa vai mitä? Toivon, että osaat selittää, miksi näin tapahtuu...
|