2011-10-27 15 views
21

Se un'attività viene creata utilizzando l'opzione LongRunning ci sono effetti collaterali in quanto non utilizzano ThreadPoolAttività LongRunning effetti collaterali?

+0

http://stackoverflow.com/questions/3105988/task-parallel-library-taskcreationoptions-longrunning-option-and-threadpool funziona automaticamente quando si immette il titolo della domanda nel browser? :) –

+0

L'ho trovato! http://msdn.microsoft.com/en-us/library/dd997402.aspx – Aliostad

risposta

16

. L'effetto collaterale è che: se hai un milione di attività, potresti potenzialmente creare un milione di thread.

necessità di tener conto del fatto che ogni filo porterà memoria sovraccarico e contesto ambientale commutazione. Il sovraccarico della memoria non è così piccolo, stiamo parlando di pochi MB qui quindi, anche con migliaia di articoli, potresti incontrare dei problemi.

5

Attività LongRunning, indica che le code globali e locali verranno ignorate, in modo da impedire che blocchi l'altra thread che lo seguono nella coda locale.

Ciò significa che se si dispone di molte di queste attività a esecuzione prolungata, potrebbe creare più thread del normale.

Si può vedere nelle risposte sulla questione alcuni degli svantaggi:

http://social.msdn.microsoft.com/Forums/en/parallelextensions/thread/8304b44f-0480-488c-93a4-ec419327183b

+0

Aggiornato per essere un po 'più chiaro (e si spera più in linea con ciò che dice MSDN) – Holger

26

L'opzione LongRunning è un suggerimento per lo scheduler che significa che può scegliere di eseguire il Task su un thread non ThreadPool (se è il thread-pool sostenuta DefaultScheduler molto probabilmente sarà). Un effetto collaterale dell'opzione LongRunning è che l'inlining dell'attività non è consentito per tale attività. Ciò significa che se l'attività LongRunning crea altre attività nidificate o secondarie e chiama Wait in una di queste attività, queste verranno sempre eseguite su un thread diverso anziché essere in linea (ad esempio, eseguire sullo stesso thread eseguendo lo Wait).

Nel contesto di risposte di altre persone vale la pena notare che la creazione di un gran numero di compiti che richiedono molto tempo per completare senza il suggerimento LongRunning è ancora probabile che a causare un'escalation del numero di thread a causa della Discussione Algoritmo di iniezione utilizzato da DefaultScheduler. L'algoritmo non distingue tra thread nel pool che sono bloccati e quelli che hanno eseguito un elemento di lavoro per un lungo periodo e in entrambi i casi può rispondere iniettando più thread nel pool per provare ad aumentare il throughput del lavoro.

+7

Reflector mostra che il suggerimento, a partire da. NET 4.0, è sempre obbedito. – usr

Problemi correlati