Encontré esto en el sitio del Dr. Dobbs hoy en http://www.ddj.com/hpc-high-performance-computing/220300055?pgno=3 Es una buena sugerencia con respecto a la implementación de subprocesos. ¿Cuál es la mejor manera de lograr esto con TThread en Delphi, me pregunto? Gracias BrianCómo programar el número de subprocesos en Delphi
=== del Dr. Dobbs ==============
Hacer multithreading configurable! El número de subprocesos utilizados en un programa siempre debe poder configurarse desde 0 (sin hilos adicionales) hasta un número arbitrario. Esto no solo permite una personalización para un rendimiento óptimo, sino que también demuestra ser una buena herramienta de depuración y, a veces, un salvavidas cuando ocurren condiciones de carrera desconocidas en los sistemas del cliente. Recuerdo más de una situación en la que los clientes pudieron superar errores fatales desconectando el multihilo. Esto, por supuesto, no se aplica solo a la E/S de archivos multiproceso.
Considérese el siguiente pseudocódigo:
int CMyThreadManger::AddThread(CThreadObj theTask)
{
if(mUsedThreadCount >= gConfiguration.MaxThreadCount())
return theTask.Execute(); // execute task in main thread
// add task to thread pool and start the thread
...
}
Tal mecanismo no es muy complicado (aunque probablemente será necesario un poco más de trabajo que se muestra aquí), pero a veces es muy eficaz. También se puede usar con librerías de subprocesamiento precompiladas como OpenMP o Intel Threading Building Blocks. Teniendo en cuenta las medidas que se muestran aquí, es una buena idea incluir más de un conteo de hilos configurables (por ejemplo, uno para E/S de archivos y uno para tareas de CPU centrales). El valor predeterminado probablemente sea 0 para archivos de E/S y < número de núcleos encontrados > para tareas de CPU. Pero todos los multihilos deben ser separables. Un enfoque más sofisticado podría incluso incluir algún código para probar el rendimiento de múltiples subprocesos y establecer el número de subprocesos utilizados automáticamente, incluso puede ser individual para las diferentes tareas.
===================
No es necesario suspender y reanudar los hilos. Deje que cada subproceso espere en un evento o semáforo, o use 'WaitMessage()' con un ciclo de mensajes de subproceso (puede ser necesario para OLE). Hay mucha discusión sobre el tema aquí en SO bajo [delphi], léelo, pero es mejor ignorar los argumentos de las personas que piensan que saben mejor que Embarcadero y los desarrolladores de Microsoft, y tratar de decirte usando 'Suspend()' y 'Resume()' estaría bien. – mghie