No se hace la pregunta, posiblemente más fundamental, de "¿Cómo puedo tener 290 procesos si mi CPU sólo tiene cuatro núcleos?". Esta respuesta es un poco de historia, que puede ayudarte a entender el panorama general, aunque la pregunta específica ya ha sido respondida. Por lo tanto, no voy a dar una versión TL;DR.
Hace tiempo (pensemos en los años 50-60), los ordenadores sólo podían hacer una cosa a la vez. Eran muy caros, llenaban habitaciones enteras 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 El sistema de gestión de la información, en el que los usuarios enviaban tareas al ordenador y éstas se ponían en cola, se ejecutaban una tras otra y los resultados se enviaban al usuario. Eso estaba bien, pero significaba que, si querías hacer un cálculo que iba a llevar un par de días, nadie más podía usar el ordenador durante ese tiempo.
La siguiente innovación (pensemos en los años 60-70) fue tiempo compartido . Ahora, en lugar de ejecutar la totalidad de una tarea, y luego la totalidad de la siguiente, el ordenador ejecutaría un trozo de una tarea, luego la pausaría y ejecutaría un trozo de la siguiente, y así sucesivamente. De este modo, el ordenador daría la impresión de estar ejecutando varios procesos simultáneamente. La gran ventaja de esto es que ahora puedes ejecutar un cálculo que te llevará un par de días y, aunque ahora tardará aún más, porque se sigue interrumpiendo, otras personas pueden seguir utilizando la máquina durante ese tiempo.
Todo esto era para enormes ordenadores de tipo mainframe. Cuando los ordenadores personales empezaron a popularizarse, al principio no eran muy potentes y, además, como eran personal parecía correcto que sólo pudieran hacer una cosa -ejecutar una aplicación- a la vez (pensemos en los años 80). Pero, a medida que se hicieron más potentes (desde los años 90 hasta la actualidad), la gente quiso que sus ordenadores personales también compartieran el tiempo.
Así que acabamos con ordenadores personales que daban la ilusión de ejecutar múltiples procesos de forma concurrente, pero que en realidad los ejecutaban de uno en uno durante breves periodos de tiempo y luego los ponían en pausa. Los hilos son esencialmente lo mismo: con el tiempo, la gente quería que incluso los procesos individuales dieran la ilusión de hacer varias cosas simultáneamente. Al principio, el escritor de la aplicación tenía que encargarse de ello: pasar un rato actualizando los gráficos, pausar eso, pasar un rato calculando, pausar eso, pasar un rato haciendo otra cosa, ...
Sin embargo, el sistema operativo ya era bueno en la gestión de múltiples procesos, tenía sentido ampliarlo para gestionar estos subprocesos, que se llaman hilos. Así, ahora tenemos un modelo en el que 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 algo independiente.
Pero, en el nivel superior, la CPU sigue dando la ilusión de que todos estos hilos están funcionando al mismo tiempo. En realidad, está ejecutando uno durante un rato, pausándolo, eligiendo otro para ejecutarlo durante un rato, y así sucesivamente. Excepto que las CPUs modernas pueden ejecutar más de un hilo a la vez. Así que, en el real En realidad, el sistema operativo está jugando a este juego de "ejecutar durante un rato, pausar, ejecutar otra cosa durante un rato, pausar" en todos los núcleos simultáneamente. Así que puedes tener tantos hilos como quieras (y los diseñadores de tu aplicación) pero, en cualquier momento, todos menos unos pocos estarán realmente en pausa.
0 votos
Los comentarios no son para ampliar la discusión; esta conversación ha sido trasladado al chat .