.NET 4 include un nuovo namespace, System.Threading.Tasks, che contiene classi che astraiscono la funzionalità di threading. Usa ThreadPool in background. Un compito rappresenta il lavoro di un'unità che deve essere completata. Il lavoro di questa unità può essere eseguito in un thread separato oppure un compito può essere avviato in sincrono, il che richiede di attendere il thread principale di accordo. Usare i task non solo ti dà un livello di astrazione, ma anche molto controllo sui thread sottostanti. I compiti offrono molta flessibilità quando si tratta di programmare il lavoro da svolgere. Ad esempio, puoi definire un compito continuo – quale lavoro dovrebbe essere svolto dopo che un compito è stato completato. Questo può fare la differenza tra un compito riuscito e uno meno. Inoltre, i compiti possono essere organizzati in una gerarchia. Ad esempio, un task genitore può creare un nuovo task figlio. Questo crea una dipendenza in modo che, se annulli il task genitore, anche il suo task figlio verrà annullato.
Oggi è popolare usare metodi di esecuzione dei compiti, ed è ad alte prestazioni, e non so dove siano le prestazioni del compito.
Ho testato personalmente Task e Thread, e ho la sensazione che Task sia molto lenta, il che influisce molto sulle prestazioni, e il codice di test è il seguente:
Ripetiamo il metodo 1000 volte, poi il metodo blocca per 100 millisecondi, e il risultato del test è il seguente:
Risultato:
L'esecuzione del thread richiede 188 millisecondi
L'esecuzione del compito richiede 14.671 millisecondi
La differenza di velocità tra i due è di 78 volte!!
Il compito è molto lento, non so perché succeda, c'è qualcosa che non va nel mio codice di test o cosa? Spero tu possa spiegare perché succede...
|