.NET 4 inkluderer et nyt navnerum, System.Threading.Tasks, som indeholder klasser, der abstraherer trådningsfunktionalitet. Brug ThreadPool i baggrunden. En opgave repræsenterer arbejdet i en enhed, der skal udføres. Arbejdet med denne enhed kan køres i en separat tråd, eller en opgave kan startes synkront, hvilket kræver ventetid på hovedtuningtråden. At bruge opgaver giver dig ikke kun et abstraktionslag, men også meget kontrol over de underliggende tråde. Opgaver giver stor fleksibilitet, når det gælder planlægning af det arbejde, der skal udføres. For eksempel kan du definere en kontinuerlig opgave – hvilket arbejde der skal udføres efter en opgave er afsluttet. Dette kan være forskellen på en succesfuld opgave eller ej. Derudover kan opgaver arrangeres i et hierarki. For eksempel kan en forældreopgave oprette en ny underopgave. Dette skaber en afhængighed, så hvis du annullerer forældreopgaven, vil dens underopgave også blive annulleret.
I dag er det populært at bruge metoder til opgaveudførelse, og det er højtydende, og jeg ved ikke, hvor opgavepræstationen er.
Jeg testede selv Task og Thread, og jeg føler, at Task er meget langsom, hvilket i høj grad påvirker ydeevnen, og testkoden er som følger:
Vi kører metoden 1000 gange, og derefter blokerer metoden i 100 millisekunder, og testresultatet er som følger:
Udfald:
Trådeksekveringen tager 188 millisekunder
Opgaveudførelsen tager 14.671 millisekunder
Hastighedsforskellen mellem de to er 78 gange!!
Opgaven er meget langsom, jeg ved ikke hvorfor det sker, er der noget galt med min testkode, eller hvad? Jeg håber, du kan forklare, hvorfor det sker...
|