2009-12-30 5 views
5

Entiendo que no se garantiza que los subprocesos administrados se ejecuten en el mismo subproceso del sistema operativo.¿Con qué frecuencia un subproceso administrado cambia los subprocesos del sistema operativo?

Si el CLR puede cambiar un subproceso administrado entre subprocesos del sistema operativo, ¿con qué frecuencia sucede esto? ¿Qué influencia tiene la frecuencia?

Tengo un separate question sobre cómo evitar que ocurra la conmutación. El segundo premio para mí sería que esto no ocurra con demasiada frecuencia (menos de una vez por minuto estaría bien).

Respuesta

7

Depende completamente del host. No hay garantía de cuándo o dónde podría tener lugar un cambio de subproceso (si es que lo hace), dado un host en particular.

Sin embargo, desde .NET 2.0, que ha sido capaz de llamar al método BeginThreadAffinity estática para notificar al host que el código que se ejecuta depende de la identidad de la hebra de OS subyacente:

http://msdn.microsoft.com/en-us/library/system.threading.thread.beginthreadaffinity(VS.80).aspx

Por supuesto, asegúrate de llamar al método EndThreadAffinity cuando hayas terminado el hilo (no estoy seguro de lo que sucederá si solo dejas que el hilo termine sin llamar a EndThreadAffinity. No me puedo imaginar que tenga un impacto, pero es mejor ser explícito en este asunto, IMO):

http://msdn.microsoft.com/en-us/library/system.threading.thread.endthreadaffinity(VS.80).aspx

4

Por lo que yo sé, la implementación actual de los mapas CLR administra los hilos a los hilos del sistema operativo. Sin embargo, como la documentación dice que esto no está garantizado, es decir, es un detalle de implementación, por lo que no puede asumir nada. Podría cambiar, pero incluso si no lo hace, el consejo de la documentación es que no debe confiar en un mapeo uno a uno.

Como CasperOne señala que puede establecer la afinidad de subprocesos, pero aparte de eso, no hay garantías.

Cuestiones relacionadas