Tengo un método en mi algoritmo que ejecuta un ciclo muy ajustado en un gran conjunto de datos. Originalmente lo escribí de subproceso único, que estaba bien, pero tardó mucho tiempo. Estoy al punto ahora de querer acelerarlo, entonces ahora estoy usando ThreadPool para paralelizar el trabajo. El problema es que esto hace que el uso de mi CPU pase al 95-100%, lo que esperaba. Sin embargo, mi desempeño ha aumentado dramáticamente, pero creo que podría hacerlo mejor si pudiera reducir todo el cambio de contexto. Esto también hace que mis otros programas estén un poco descuidados ya que tienen que luchar contra los hilos de los recursos de la CPU.Devolución de llamada de ThreadPool en lazo cerrado - 100% CPU
Mi pregunta es ¿cómo debo hacer esto? Lo único que he podido pensar es limitar el número de subprocesos que se ejecutan a la vez, pero esto puede hacer que mi algoritmo sea más lento, ya que solo unos pocos subprocesos se podrán ejecutar a la vez. Tampoco quiero añadir dormidos en mis hilos, ya que solo necesito que el algoritmo se ejecute lo más rápido posible.
EDITAR: Varias personas han mencionado usar el TPL. Creo que es una gran idea, pero desafortunadamente me olvidé de mencionar que estoy atascado con .NET 3.5 ya que la aplicación principal aún no ha lanzado una versión con .NET 4.
Si quiere velocidad, ¿por qué se llevaría todas las cosas a la velocidad? El cambio de contexto lo realiza el sistema operativo, no te metas con eso ... – gbianchi
La solución es reducir la prioridad de los subprocesos en el grupo. Esta no es una respuesta porque no sé cómo hacerlo de manera eficiente :( –
Suena como que debe hacer que las tareas individuales sean más grandes. OTOH, el grupo de subprocesos es lo suficientemente inteligente como para hacer ya la mayor parte de lo que sugiere. Si tiene más tareas que las CPU, los pondrá en cola en lugar de iniciar más hilos. –