Tengo un procesador Pentium core i5, que tiene 4 núcleos. Si hago esto en un programa de consola C #
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
¿Se garantiza que los subprocesos t1 y t2 se ejecuten en núcleos separados?

t1yt2se ejecuta en diferentes momentos en un orden arbitrario (por ejemplo, es posible quet2comience antest1en algunos modelos).Respuestas:
No puede garantizar en .Net que dos
Threads se ejecuten en dos núcleos separados. De hecho, tampoco puede garantizar queThreadse ejecutará en un solo núcleo (!) .Esto se debe a que los subprocesos administrados no son lo mismo que los subprocesos del sistema operativo : un solo subproceso administrado puede usar múltiples subprocesos del sistema operativo para admitirlo. En C #, solo trata directamente con
Threads administrados (al menos, sin recurrir a p / invoke para llamar a las funciones de subprocesos de WinAPI, lo que nunca debe hacer) .Sin embargo, los planificadores de subprocesos .Net y Windows son muy buenos en lo que hacen: no ejecutarían dos subprocesos en un solo núcleo, mientras que un segundo núcleo está completamente inactivo. Por lo tanto, en general, no necesita preocuparse por eso.
fuente
Threads son hebras de SO. Pero esa no es la razón por la cual no hay garantía de que un solo hilo siempre se ejecute en el mismo núcleo.asyncpalabra clave (que es de lo que supongo que está hablando, ya que "hilos asíncronos" es redundante) es simplemente azúcar sintáctica para usar unBackgroundWorkerhilo, que es como cualquier otro hilo .Net; no puede garantizar si se ejecutará en un núcleo separado o no.No, el sistema operativo y la CPU decidirán qué ejecutar y cuándo. en el ejemplo simple que ha mostrado, excluyendo otras tareas, sí, esas probablemente se ejecutarían en paralelo en núcleos separados, pero rara vez hay una garantía de que ese sea el caso.
Puede usar la afinidad de subproceso para intentar tomar cierto control sobre la asignación de un núcleo a un subproceso determinado.
También considere las prioridades de programación para apilar el mazo en términos de qué hilos deben ser completamente paralelos y cuáles pueden esperar.
fuente