.NET 4 include un nou spațiu de nume, System.Threading.Tasks, care conține clase ce abstractizează funcționalitatea threading-ului. Folosește ThreadPool în fundal. O sarcină reprezintă munca unei unități care trebuie finalizată. Munca acestei unități poate fi executată într-un fir separat sau o sarcină poate fi începută sincron, ceea ce necesită așteptarea firului principal de reglaj. Folosirea sarcinilor nu doar că îți oferă un strat de abstractizare, dar îți oferă și mult control asupra firelor de execuție subiacente. Sarcinile oferă multă flexibilitate când vine vorba de programarea muncii care trebuie făcute. De exemplu, poți defini o sarcină continuă – ce muncă trebuie făcută după ce o sarcină este finalizată. Acest lucru poate face diferența între o sarcină reușită și o nu. În plus, sarcinile pot fi aranjate într-o ierarhie. De exemplu, o sarcină părinte poate crea o nouă sarcină copil. Aceasta creează o dependență astfel încât, dacă anulezi sarcina părinte, sarcina copilului va fi de asemenea anulată.
În zilele noastre, este popular să folosești metode de execuție a sarcinilor, iar acestea sunt de înaltă performanță, iar eu nu știu unde este performanța sarcinii.
Am testat personal Task și Thread și simt că Task este foarte lent, ceea ce afectează mult performanța, iar codul de test este următorul:
Parcurgem metoda de 1000 de ori, apoi metoda blochează timp de 100 de milisecunde, iar rezultatul testului este următorul:
Rezultat:
Execuția firului durează 188 de milisecunde
Executarea sarcinii durează 14.671 milisecunde
Diferența de viteză dintre cele două este de 78 de ori!!
Sarcina este foarte lentă, nu știu de ce se întâmplă asta, există ceva în neregulă cu codul meu de test sau ce? Sper că poți explica de ce se întâmplă asta...
|