programming parallelism parallel net examples example c# .net multithreading .net-4.0 task-parallel-library

c# - parallelism - ¿Tarea de los efectos secundarios de LongRunning?



vb net parallel programming examples (3)

Si se crea una tarea utilizando la opción LongRunning, ¿existen efectos secundarios, ya que no utilizan ThreadPool?



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

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


La opción LongRunning es una sugerencia para el programador, lo que significa que puede elegir ejecutar la Task en un subproceso que no sea ThreadPool (si es el DefaultScheduler respaldado por un grupo de subprocesos, es muy probable que lo haga). Un efecto secundario de la opción LongRunning es que la Inlineación de Tareas no está permitida para esa Tarea. Esto significa que si la tarea LongRunning crea otras tareas anidadas o secundarias y las llamadas en 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 la 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 demoran mucho en completarse sin la sugerencia LongRunning es probable que cause una escalada en el número de subprocesos debido al algoritmo de inyección de subprocesos que utiliza DefaultScheduler . El algoritmo no distingue entre los subprocesos de la agrupación que están bloqueados y los que han estado ejecutando un elemento de trabajo durante mucho tiempo y, en ambos casos, pueden responder inyectando más subprocesos en la agrupación para intentar aumentar el rendimiento del trabajo.