¿Cuál es la diferencia entre los hilos de hardware y software y cómo se ‘comunican’?

Si tiene un procesador de cuatro núcleos, puede tener cuatro subprocesos de hardware u ocho subprocesos de hardware si su procesador está hiperprocesado. Lo que esto significa es que potencialmente puede tener ocho subprocesos que se ejecutan en paralelo o al mismo tiempo.

Ahora, puede preguntarse: si eso es cierto, ¿cómo puedo generar cientos de hilos en mi código C ++? Bueno, eso es solo una ilusión. Claro, tienes 100 hilos, pero eso no significa que estén funcionando al mismo tiempo. Simplemente significa que están allí, y depende del planificador determinar cómo ejecutar estos subprocesos y durante cuánto tiempo ejecutar cada subproceso (determinado por la cantidad de CPU y la cantidad de E / S que usa cada uno, entre otros factores) . Estos se denominan hilos de nivel de kernel: el kernel los “ve” y sabe que existen.

Ahora hay una línea muy borrosa entre “hilos de software” y “hilos de hardware”. Estos no son dos conceptos, son lo mismo, solo hilos. Tenga en cuenta que si tiene un procesador que admite, por ejemplo, ocho subprocesos, generar ocho subprocesos no significará que se ejecutarán juntos en los ocho núcleos. El planificador puede elegir ejecutarlos todos en solo dos núcleos, pero aún tiene ocho hilos.

En mi entendimiento limitado … la pregunta no tiene sentido. Más bien, piense de esta manera. Un procesador con núcleos [math] n [/ math] y subprocesos [math] m [/ math] finge al sistema operativo que hay procesadores [math] n \ times m [/ math]. Cada núcleo puede ejecutarse completamente en paralelo con otros núcleos y, lo que es más importante, tiene una ruta independiente hacia la memoria. Sin embargo, esto no es cierto para los subprocesos y puede haber otras restricciones sobre qué unidades de ejecución se pueden usar simultáneamente. Entonces, si, por ejemplo, en un núcleo de 2 hilos, los 2 hilos de un programa requieren acceso a RAM y la RAM requerida no está en una de las cachés del procesador, entonces un hilo tendrá que esperar al otro. Por el contrario, si las piezas de RAM requeridas están en el caché, entonces los hilos pueden progresar. Esto puede ser soportado por el propio procesador mediante el uso de ejecución fuera de orden en sus tuberías, pero también por un optimizador de mirilla inteligente en el compilador, esto también podría ocurrir durante la ejecución como en un motor similar a Hotspot de Java, que tiene un conocimiento íntimo del modelo de procesador particular en el que se está ejecutando. Por modelo, quiero decir dentro de la familia de procesadores, por ejemplo, los múltiples modelos dentro de una sola generación de digamos i5 o i7.