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

Si tienes un procesador de cuatro núcleos, puedes tener cuatro hilos de hardware, u ocho hilos de hardware si tu procesador es hiper-hilo. Lo que esto significa es que puedes tener potencialmente ocho hilos que se ejecutan en paralelo, o al mismo tiempo.

Ahora, puedes preguntarte-si eso es cierto, ¿cómo soy capaz de generar cientos de hilos en mi código C++? Bueno, eso es sólo una ilusión. Claro, tienes 100 hilos, pero eso no significa que estén trabajando al mismo tiempo. Sólo significa que están ahí, y depende del programador determinar cómo ejecutar estos hilos y durante cuánto tiempo ejecutar cada hilo (determinado por la cantidad de CPU y la cantidad de E/S que utiliza cada uno, entre otros factores). Estos se denominan hilos a nivel de kernel-el kernel los "ve" y sabe que existen.

Ahora hay una línea realmente borrosa entre los "hilos de software" y los "hilos de hardware". No son dos conceptos, son la misma cosa-sólo hilos. Ten en cuenta que si tienes un procesador que soporta, digamos, ocho hilos, entonces generar ocho hilos no significa que se ejecuten juntos en los ocho núcleos. El programador puede elegir ejecutarlos todos en sólo dos núcleos, pero usted todavía tiene ocho hilos.