2010-03-24 9 views
12

¿Cuál es la diferencia entre afinidad de subprocesos y afinidad de procesos?¿Cuál es la diferencia entre afinidad de subprocesos y afinidad de procesos?

Si tengo dos hilos y tengo una máquina de doble núcleo, ¿es posible ejecutar estos dos hilos en paralelo en los dos núcleos?

Si utilizo la máscara de afinidad del procesador, entonces puedo controlar la ejecución de un proceso en los núcleos, pero cuando tengo que ejecutar los hilos en un núcleo particular, ¿cómo puedo hacer que estos hilos sean específicos del núcleo?

Se apreciará un ejemplo muy simple.

Respuesta

0

No soy consciente de que puede establecer la afinidad de subprocesos en .net, por lo que el entorno decide qué subprocesos ejecutar en qué núcleo.

+0

¿Pero cómo ejecutar subprocesos en núcleo (s) típico (s)? – DotNetBeginner

+0

@Brian Rasmussen, ¿y qué? Respaldo mis palabras, que no hay forma de .NET de forzar un hilo en particular para ejecutar en un procesador particular. Para obtener más información, consulte este hilo: http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/3279302a-6786-44a7-b69d-c302699b6fcb – Axarydax

+0

Disculpe, no le he entendido bien. –

4

¿Cuál es la diferencia entre Thread Affinity y Process affinity?

La afinidad de proceso es la máscara de afinidad predeterminada para todos los hilos que pertenecen a ese proceso. Los nuevos hilos comenzarán con la máscara de afinidad de proceso si no se especifica lo contrario. Sin embargo, la afinidad de un único subproceso se puede cambiar sin cambiar la afinidad del proceso (y las máscaras de afinidad de los otros subprocesos), y ahí es cuando hay una diferencia entre las afinidades del proceso y del subproceso.

Si tengo dos hilos y tengo una máquina de duelo central, ¿es posible ejecutar estos dos hilos paralelamente en los dos núcleos?

Sí, es posible, pero en la mayoría de los casos, realmente debería dejar que el sistema operativo decida ... lo más probable es que sea más inteligente que usted.

Si uso la máscara affinity del procesador entonces puedo controlar la ejecución de un proceso en los núcleos, pero cuando tengo que ejecutar los hilos en un núcleo particular, ¿cómo puedo hacer que estos hilos sean específicos del núcleo?

Usted tendría que utilizar p/invocar a llamar a la función no administrado SetThreadAffinityMask() y luego usar Thread.BeginThreadAffinity() para asegurar que el subproceso administrado queda con un hilo determinado sistema operativo. ¡Pero realmente no quieres hacer eso!

+0

He intentado usar SetThreadAffinityMask(), plese echa un vistazo a mi pregunta @ http://stackoverflow.com/questions/2498501/using-setthreadaffinitymask-function-imported-from-kernel32-dll-in-c-code – DotNetBeginner

Cuestiones relacionadas