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?
t1
yt2
se ejecuta en diferentes momentos en un orden arbitrario (por ejemplo, es posible quet2
comience antest1
en algunos modelos).Respuestas:
No puede garantizar en .Net que dos
Thread
s se ejecuten en dos núcleos separados. De hecho, tampoco puede garantizar queThread
se 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
Thread
s 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
Thread
s 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.async
palabra 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 unBackgroundWorker
hilo, 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