Cos'è un pool di thread? Perché usare i pool di thread? Come usare i pool di thread?
1. Cos'è un pool di fili?
La classe ThreadPool del .NET Framework fornisce un pool di thread che può essere utilizzato per eseguire compiti, inviare elementi di lavoro, gestire I/O asincroni, attendere per conto di altri thread e gestire timer. Quindi cos'è un pool di thread? Il pool di thread è in realtà un "pool" che memorizza gli oggetti thread e fornisce alcuni metodi di base, come impostare il numero minimo/massimo di thread nel pool, mettere in coda i metodi da eseguire, ecc. ThreadPool è una classe statica, quindi può essere usata direttamente senza creare oggetti.
2. Perché usare i pool di thread? Quali sono i benefici?
Il sito ufficiale di Microsoft dice quanto segue: molte applicazioni creano un gran numero di thread che sono in sospeso, in attesa che gli eventi si verifichino. Ci sono anche molti thread che possono andare in ibernazione solo per svegliarsi periodicamente e consultare informazioni di stato modificate o aggiornate. Pool di thread, che ti permettono di utilizzare i thread in modo più efficiente attraverso un pool di thread worker gestito dal sistema.
Per dirla semplicemente, ogni nuovo thread deve occupare spazio di memoria e altre risorse, e con così tanti nuovi thread, molti di loro sono dormienti o in attesa del rilascio delle risorse. Ci sono molti thread che svolgono solo qualche piccolo lavoro periodicamente, come aggiornare dati, ecc., che sono troppo dispendiosi per essere disegnati, ed è raro che un gran numero di thread si sviluppi nella programmazione vera e poi termini in un breve periodo di tempo. Pertanto, fu proposto il concetto di pool di fili. Se l'applicazione effettua un'altra richiesta al pool di thread, il thread in stato di sospeso viene attivato ed esegue il compito senza creare un nuovo thread, risparmiando così molti sovrapposti. Il sistema distruggerà automaticamente i thread solo quando il numero di thread raggiungerà il massimo di thread. Pertanto, l'uso dei pool di thread può evitare grandi spese di creazione e distruzione, avere migliori prestazioni e stabilità e, in secondo luogo, gli sviluppatori possono concentrarsi su altri compiti affidando i thread alla gestione del sistema.
3. Come uso i pool di fili?
In effetti, i pool di thread sono molto semplici da usare, come segue
a. Impostare il pool massimo e minimo di thread:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Imposta il numero di richieste per un pool di thread che possono essere attivi contemporaneamente. Tutte le richieste superiori a questo numero rimarranno in coda finché il thread pool non sarà disponibile. Puoi anche impostare il numero minimo di thread.
b. Aggiungi attività al pool di thread:
ThreadPool.QueueUserWorkItem(nuovo WaitCallback(nome del metodo));
o ThreadPool.QueueUserWorkItem (nuovo WaitCallback(nome metodo), parametro);
Ad esempio, se un massimo di 5 thread nel pool di thread esegue un metodo 60 volte, lo stipendio totale per 5 anni è il seguente:
Se non usi il thread pooling, potresti dover aprire 60 thread per eseguire il metodo Run() in modo asincrono, il che è uno spreco di risorse di spazio. Ora usiamo fino a 5 thread, che possono essere eseguiti in 1 secondo, e l'efficienza e le prestazioni sono molto buone.
|