.NET 4 obsahuje nový menný priestor System.Threading.Tasks, ktorý obsahuje triedy abstrahujúce funkcionalitu vlákien. Použi ThreadPool na pozadí. Úloha predstavuje prácu jednotky, ktorá by mala byť dokončená. Práca tejto jednotky môže byť vykonaná v samostatnom vlákne alebo môže byť synchronne spustená úloha, čo vyžaduje čakanie na hlavné ladiace vlákno. Používanie úloh vám nielen poskytuje vrstvu abstrakcie, ale aj veľkú kontrolu nad základnými vláknami. Úlohy ponúkajú veľkú flexibilitu pri plánovaní práce, ktorú je potrebné vykonať. Napríklad môžete definovať kontinuálnu úlohu – akú prácu by sa mala vykonať po dokončení úlohy. To môže rozhodnúť o úspešnej alebo neúspešnej úlohe. Okrem toho je možné úlohy usporiadať do hierarchie. Napríklad rodičovská úloha môže vytvoriť novú podriadenú úlohu. Tým vzniká závislosť, takže ak zrušíte rodičovskú úlohu, zruší sa aj jej podriadená úloha.
Dnes je populárne používať metódy vykonávania úloh, ktoré sú vysoko výkonné, a neviem, kde sa výkon úloh nachádza.
Sám som testoval Task a Thread a mám pocit, že Task je veľmi pomalý, čo výrazne ovplyvňuje výkon, a testovací kód je nasledovný:
Metódu prechádzame 1000-krát, potom sa metóda blokuje 100 milisekúnd a výsledok testu je nasledovný:
Výsledok:
Vykonanie vlákna trvá 188 milisekúnd
Vykonanie úlohy trvá 14 671 milisekúnd
Rozdiel v rýchlosti medzi nimi je 78-násobný!!
Úloha je veľmi pomalá, neviem, prečo sa to deje, je niečo zlé s mojím testovacím kódom, alebo čo? Dúfam, že mi vysvetlíte, prečo sa to deje...
|