Una regla bastante buena para ejecutar tareas intensivas es ejecutar el mismo número que su núcleo físico contar.
Sí, puede ejecutar más tareas, pero esperarán recursos (o subprocesos en un grupo de subprocesos) y su casilla, independientemente de su tamaño, no puede asignar todos los recursos centrales de la CPU el 100% del tiempo a un hilo debido a procesos de fondo/otros. Por lo tanto, cuantas más tareas instaure, cuantos más hilos genere, a medida que superen los posibles hilos simultáneos posibles (1 por núcleo), más gestión de recursos, colas e intercambios ocurrirá.
Una prueba que hicimos donde trabajo ahora utilizando un patrón viral para iniciar tareas adicionales encontró que lo óptimo era bastante cercano al recuento de la CPU como límite. Las tareas iniciadas en una proporción de uno a uno con el recuento de núcleos físicos se ejecutaron en aproximadamente 1 minuto por tarea para completarse. Establecido en el doble del recuento de CPU, el tiempo de la tarea pasó de 1 minuto promedio a aproximadamente 5 minutos de tiempo promedio para completar. Se vuelve geométricamente más lento cuanto más tareas se inicien después del recuento de núcleos.
Así, por ejemplo, si tiene 8 núcleos físicos, 8 tareas (y usar TPL, esencialmente 8 subprocesos concurrentes en proceso activo) deberían ser las más rápidas. Existe el hilo o proceso principal que crea las otras tareas y otros procesos en segundo plano, pero si el cuadro está bastante aislado para el placer de la explotación de recursos, estos serán bastante mínimos.
La ventaja de programar su límite de tareas basado en el recuento de núcleos mientras mastica las tareas de una cola o lista para que cuando implemente la aplicación en cajas de diferentes tamaños, se ajuste automáticamente.
Para determinar esto mediante programación, utilizamos
var CoreCount = System.Environment.ProcessorCount/2;
Por qué dividir por dos, lo preguntas? Porque casi todos los procesadores modernos usan núcleos lógicos o hyperthreading. Con sus propias pruebas, debe encontrar que si usa el conteo lógico, su velocidad general por tarea y, por lo tanto, todo el proceso, disminuirá significativamente. Núcleos físicos es la clave. No pudimos ver una forma rápida de encontrar física vs lógica, pero una encuesta rápida de nuestras casillas encontró que esto era consistentemente cierto. YMMV, pero esto podría llegar bastante rápido.
¿Qué están haciendo los hilos? –
+1 buena pregunta. Cada uno de ellos realiza una llamada SOAP para transmitir datos soem y espera a que vuelva – Mawg
Excepto, por supuesto, que el "retorno" es asincrónico, por lo que realmente no están esperando. Otros hilos pueden ejecutarse tan pronto como la solicitud SOAP (llamada de confirmación) se envíe a través de HTTP – Mawg