Stavo per fare un commento, ma è passato troppo tempo.
CodemonkeyKing sembra aver raggiunto un punto importante, anche se non abbastanza forte secondo me.
Ci sono molti criteri che è possibile utilizzare per descrivere il codice. Verrà utilizzato in un'app funzionante o no? App Winforms o no? È un'app Server o client? libreria o exe standalone? ecc. ecc.
Mi sembra che se il codice verrà eseguito in un'app standalone e si avrà il controllo su tutto il codice circostante, sarà possibile rollare il proprio pool di thread, avviare i propri thread e misurare e gestire il costo attorno all'avvio del thread, alla latenza dei thread e al consumo delle risorse. O potresti usare la QUWI, ma non ucciderà la tua app in alcun modo. Sei libero di scegliere.
D'altra parte se il codice è impacchettato come una libreria che può essere utilizzata in un server - in ASP.NET, o forse in un'app CLR SQL o in un servizio WCF - allora è una pessima idea creare discussioni. È necessario utilizzare QUWI o qualche altro meccanismo che sfrutta il pool di thread incorporato (come BackgroundWorker). Se deve essere utilizzato nelle app lato client con altre librerie, ancora una volta, è necessario QUWI. Immagina che tutte le librerie che vogliono sfruttare i computer multi-core facciano rotolare i propri thread. Ci sarebbe il caos completo nelle app che utilizzavano più di poche librerie. Fili rampanti, tutti in competizione per le stesse risorse. Nessuna coordinazione centrale dei processori #threads vs #.
Buono hygeine richiede che una biblioteca, se è per essere consumato in applicazioni client o applicazioni del server, utilizza il ThreadPool comuni, e questo significa QUWI.
L'ultima cosa da capire è questa;
Un thread gestito è un thread in background o un thread in primo piano. I thread in background sono identici ai thread in primo piano con un'eccezione: un thread in background non mantiene attivo l'ambiente di esecuzione gestito. Una volta che tutti i thread in primo piano sono stati interrotti in un processo gestito (in cui il file .exe è un assembly gestito), il sistema interrompe tutti i thread in background e si arresta.
I thread che appartengono al pool di thread gestito (ovvero i thread la cui proprietà IsThreadPoolThread è true) sono thread in background. Tutti i thread che entrano nell'ambiente di esecuzione gestito dal codice non gestito sono contrassegnati come thread in background. Tutti i thread generati dalla creazione e dall'avvio di un nuovo oggetto Thread sono per impostazione predefinita i thread in primo piano.
Se si utilizza un thread per monitorare un'attività, ad esempio una connessione socket, impostare la proprietà IsBackground su true in modo che il thread non impedisca la chiusura del processo.
dal MSDN site.
Non ho tratto alcun beneficio da quella discussione, che sembrava essere principalmente un dibattito sul costo di iniziare una discussione. – Cheeso
Pensavo che il link fosse fantastico. Non ho visto nulla sul costo di iniziare un thread nella risposta accettata - ma diverse limitazioni del threadpool sono enumerate abbastanza bene lì. – BrainSlugs83