2011-10-27 14 views
21

Si se crea una Tarea utilizando la opción Ejecución Larga si hay efectos secundarios ya que no usan las tareas ThreadPoolTask LongRunning ¿efectos secundarios?

+0

http://stackoverflow.com/questions/3105988/task-parallel-library-taskcreationoptions-longrunning-option-and-threadpool ¿la finalización automática funciona al ingresar el título de la pregunta en su navegador? :) –

+0

¡Lo encontré! http://msdn.microsoft.com/en-us/library/dd997402.aspx – Aliostad

Respuesta

16

. El efecto secundario es que: si tiene un millón de tareas, podría crear un millón de subprocesos.

necesidad de tener en cuenta que cada subproceso traerá su memoria sobrecarga y contexto sobrecarga de conmutación. La sobrecarga de memoria no es tan pequeña, estamos hablando unos pocos MB aquí, así que incluso con miles de elementos, podría tener problemas.

5

LongRunning, indica que se omitirán las colas globales y locales, para evitar que bloquee el otro hilos que vienen después en la cola local.

Eso significa que, si tiene muchas de estas tareas de ejecución larga, podría crear más hilos de lo normal.

Se puede ver en las respuestas sobre esta cuestión algunos de los inconvenientes:

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

+0

Actualizado para ser un poco más claro (y con suerte más en línea con lo que dice MSDN) – Holger

26

La opción LongRunning es un indicio de que el programador lo que significa que puede optar por ejecutar el Task en un hilo no ThreadPool (si es el hilo de la piscina respaldado DefaultScheduler lo más probable). Un efecto secundario de la opción LongRunning es que Task Inlining no está permitido para esa tarea. Esto significa que si la tarea LongRunning crea otras tareas y llamadas anidadas o secundarias Wait en cualquiera de esas tareas, siempre se ejecutarán en un subproceso diferente en lugar de estar en línea (es decir, ejecutarse en el mismo subproceso que realiza el Wait).

En el contexto de las respuestas de otras personas vale la pena señalar que la creación de un gran número de tareas que toman mucho tiempo para completar sin la LongRunning pista sigue siendo probable que cause una escalada en el número de hilos debido al hilo Algoritmo de inyección que usa el DefaultScheduler. El algoritmo no distingue entre subprocesos en el grupo que están bloqueados y aquellos que han estado ejecutando un elemento de trabajo durante mucho tiempo y en ambos casos puede responder mediante la inyección de más subprocesos en el grupo para intentar aumentar el rendimiento del trabajo.

+7

Reflejo muestra que la sugerencia, a partir de .NET 4.0, siempre se obedece – usr

Cuestiones relacionadas