No hace la pregunta más discutible: "¿Cómo puedo tener 290 procesos cuando mi CPU solo tiene cuatro núcleos?" Esta respuesta es un poco de historia, que podría ayudarlo a comprender el panorama general, a pesar de que la pregunta específica ya ha sido respondida. Como tal, no voy a dar una versión de TL; DR.
Érase una vez (piense, 1950s –60s), las computadoras solo podían hacer una cosa a la vez. Eran muy caros, llenaban cuartos enteros, y necesitábamos una forma de hacer un uso eficiente de ellos compartiéndolos entre varias personas. La primera forma de hacerlo fue procesamiento por lotes , en el que los usuarios envían tareas a la computadora y se ponen en cola. , ejecutado uno tras otro y los resultados serían enviados de vuelta al usuario. Eso estaba bien, pero significaba que, si quería hacer un cálculo que tomaría un par de días, nadie más podría usar la computadora durante ese tiempo.
La siguiente innovación (think, 1960s –7070) fue tiempo compartido . Ahora, en lugar de ejecutar la totalidad de una tarea, luego la totalidad de la siguiente, la computadora ejecutará un poco de una tarea, luego la pausará y ejecutará un poco de la siguiente, y así sucesivamente. Por lo tanto, la computadora daría la impresión de que estaba ejecutando múltiples procesos al mismo tiempo. La gran ventaja de esto es que ahora puede realizar un cálculo que tomará un par de días y, aunque ahora tomará aún más tiempo, ya que se interrumpe, otras personas aún pueden usar la máquina durante ese tiempo.
Todo esto fue para enormes computadoras de estilo mainframe. Cuando las computadoras personales empezaron a popularizarse, inicialmente no eran muy poderosas y, bueno, ya que eran personales , parecía correcto que solo pudieran hacer una cosa & nbdp; ejecutar una aplicación - a la vez (pensar, años 80). Pero, a medida que se volvieron más poderosos (creo, desde la década de 1990 hasta el presente), las personas querían que sus computadoras personales también compartieran el tiempo.
Así que terminamos con computadoras personales que nos dieron la ilusión de ejecutar varios procesos simultáneamente al ejecutarlos uno por uno durante períodos breves y luego detenerlos. Los hilos son esencialmente lo mismo: eventualmente, la gente quería que incluso los procesos individuales dieran la ilusión de hacer múltiples cosas al mismo tiempo. Al principio, el escritor de la aplicación tenía que manejarse a sí mismo: pasar un poco de tiempo actualizando los gráficos, pausar eso, gastar un poco el cálculo, pausar eso, gastar un poco el tiempo haciendo otra cosa, ...
Sin embargo, el sistema operativo ya era bueno en la administración de múltiples procesos, tenía sentido extenderlo para administrar estos subprocesos, que se denominan subprocesos. Entonces, ahora tenemos un modelo donde cada proceso (o aplicación) contiene al menos un hilo, pero algunos contienen varios o muchos. Cada uno de estos hilos corresponde a una subtarea un tanto independiente.
Pero, en el nivel superior, la CPU solo está dando la ilusión de que todos los subprocesos se están ejecutando al mismo tiempo. En realidad, está ejecutando uno por un momento, pausándolo, eligiendo otro para correr un poco, y así sucesivamente. Excepto que las CPU modernas pueden ejecutar más de un hilo a la vez. Entonces, en la realidad real , el sistema operativo está jugando a este juego de "correr un poco, pausar, correr otra cosa un poco, pausar" en todos los núcleos simultáneamente. Por lo tanto, puede tener tantos hilos como usted (y sus diseñadores de aplicaciones) deseen pero, en cualquier momento, todos menos algunos de ellos estarán en pausa.