2008-10-26 16 views
5

Joe Duffy afirma en el artículo de MSDN "Using concurrency for scalability" que el costo de crear un subproceso es de aproximadamente 200,000 ciclos, y el costo de destrucción es de aproximadamente 100,000 ciclos.Medida de gastos de subprocesos

Cuando intento crear un nuevo hilo para realizar algunos cálculos, me gustaría estar seguro de que los cálculos en sí son más caros que 200,000 ciclos.

¿Cómo puedo medir los ciclos de la CPU? Creo que sería más interesante que medir el tiempo de ejecución.

+0

Probablemente deberías agregar el costo de las consecuencias de la lectura de la caché de instrucciones al costo de usar los hilos. – Hugo

Respuesta

2

Puede usar un generador de perfiles de muestreo como Intel Vtune para obtener una medida de cuántos ciclos de CPU se están consumiendo con una cantidad mínima de perturbación en el sistema que se está midiendo.

Al usar hilos, sin embargo, el objetivo es evitar nuevos hilos innecesarios. Mire en usar el thread pool. Esto le permitirá ejecutar elementos de trabajo de forma asíncrona, pero sin tener que generar un nuevo hilo para cada elemento.

+0

mod +1 para el consejo del grupo de hilos! –

+0

El grupo de subprocesos solo agrupa el subproceso existente; si aún no se crea un subproceso, los costos de creación son los mismos ya que no usaría ningún grupo de subprocesos. –

+0

Sí, la creación de subprocesos cuesta lo mismo si lo hace o lo hace el grupo de subprocesos. Pero el grupo de subprocesos ayuda a evitar la creación innecesaria manteniendo un número de subprocesos inactivos. Si sus elementos de trabajo son lo suficientemente pequeños como para querer evitar los costos de creación, suenan como una buena opción para un hilo de trabajo. –

1

Revisaría el espacio de nombres System.Diagnostic. Tiene muchas cosas en la memoria de seguimiento y el uso de la CPU.

0

me hizo una pregunta muy relacionada hace un par de días, y aún no han encontrado una manera de medir el uso de ciclo de la CPU real del código: Limiting assembly execution number of cpu cycles

En su caso, no se puede ejecutar un perfilado del cálculo y ver cuánto tiempo toma un solo cálculo, y comparar eso con el tiempo agregado de generar un hilo que hace el cálculo y luego eliminar el hilo después?

0

Aquí está el problema con el recuento de ciclos de CPU. Diferentes CPU toman diferentes números de ciclos para implementar la misma instrucción. Entonces, no es una IMO métrica demasiado confiable. Creo que lo que debes medir es el tiempo de ejecución, y en .NET, utilizas System.Environment.TickCount para lograr esto. Creo que es lo mejor que tienes ...

Cuestiones relacionadas