.NET 4 inkluderar ett nytt namnrymd, System.Threading.Tasks, som innehåller klasser som abstraherar ut trådningsfunktionalitet. Använd ThreadPool i bakgrunden. En uppgift representerar arbetet av en enhet som bör slutföras. Arbetet med denna enhet kan köras i en separat tråd eller så kan en uppgift startas synkront, vilket kräver att man väntar på huvudinställningstråden. Att använda uppgifter ger dig inte bara ett abstraktionslager, utan också mycket kontroll över de underliggande trådarna. Uppgifter erbjuder stor flexibilitet när det gäller att schemalägga det arbete som behöver göras. Till exempel kan du definiera en kontinuerlig uppgift – vilket arbete som ska göras efter att en uppgift är slutförd. Detta kan vara avgörande för att det blir en lyckad uppgift eller inte. Dessutom kan uppgifter ordnas i en hierarki. Till exempel kan en föräldrauppgift skapa en ny barnuppgift. Detta skapar ett beroende så att om du avbryter föräldrauppgiften, kommer även dess barnuppgift att avbrytas.
Nuförtiden är det populärt att använda metoder för uppgiftsutförande, och det är högpresterande, och jag vet inte var uppgiftsprestandan ligger.
Jag testade Task och Thread själv, och jag tycker att Task är väldigt långsam, vilket påverkar prestandan kraftigt, och testkoden är följande:
Vi loopar igenom metoden 1000 gånger, och sedan blockerar metoden i 100 millisekunder, och testresultatet är följande:
Utfall:
Trådexekveringen tar 188 millisekunder
Uppgiftsutförandet tar 14 671 millisekunder
Hastighetsskillnaden mellan de två är 78 gånger!!
Uppgiften är väldigt långsam, jag vet inte varför detta händer, är det något fel på min testkod eller vad? Jag hoppas du kan förklara varför detta händer...
|