¿Cómo puedo tener 1805 subprocesos cuando solo tengo 4 CPU virtuales?

9

Me preguntaba si alguien podría explicarme cómo en mi Monitor de actividad dice que actualmente tengo 1805 temas

Perosolotengo4núcleosvirtualesenmicomputadora(loquesignificaquesolodeberíatener4hilos).¿ElnúmerodesubprocesossignificatodoslossubprocesosqueestánsiendomanejadosporlasCPUcuandoestándecidiendoquésubprocesosejecutar?

EDITAR:Larazónporlaquecreoquesolopuedehaber4hilosenmimáquinaprovienedeesto answer . Creo que mi malentendido se debe a que la palabra 'hilo' se usa en un contexto diferente.

    
pregunta YellowPillow 08.11.2017 - 04:58

3 respuestas

24

Programación

Sus 1.805 subprocesos no se ejecutan simultáneamente . Se negocian Un núcleo ejecuta un poco del hilo, y luego lo pone a un lado para ejecutar un poco de otro hilo. Los otros núcleos hacen lo mismo. Vueltas y vueltas, los hilos se ejecutan poco a poco, no todos a la vez.

Una de las principales responsabilidades del sistema operativo (Darwin y macOS) es la programación de qué subproceso se ejecutará en cada núcleo durante cuánto tiempo.

Muchos subprocesos no tienen trabajo que hacer, por lo que se dejan inactivos y no programados. Del mismo modo, muchos subprocesos pueden estar esperando en algún recurso, como los datos que se recuperarán del almacenamiento, una conexión de red que se completará o los datos que se cargarán desde una base de datos. Con casi nada que hacer, pero verifique el estado del recurso esperado, estos subprocesos se programan muy brevemente, en todo caso.

El programador de la aplicación puede ayudar a esta operación de programación durmiendo su hilo durante un cierto tiempo cuando sabe que la espera del recurso externo llevará algún tiempo. Y si ejecuta un bucle "apretado" que hace un uso intensivo de la CPU sin que haya que esperar en recursos externos, el programador puede insertar una llamada para ser voluntario y dejarlo de lado brevemente para no acaparar el núcleo y así permitir que se ejecuten otros subprocesos.

Para obtener más detalles, consulte la página de Wikipedia para subprocesos múltiples .

Subprocesos múltiples simultáneos

En cuanto a su pregunta vinculada , los hilos de hecho son los mismos que aquí.

Uno de los problemas es el costo general de cambiar de subprocesos cuando el sistema operativo lo programa. Hay un costo significativo en el tiempo para descargar las instrucciones y los datos del hilo actual desde el núcleo y luego cargar las instrucciones y los datos del siguiente hilo programado. Parte del trabajo del sistema operativo es tratar de ser inteligente en la programación de los subprocesos para optimizar este costo general.

Algunos fabricantes de CPU han desarrollado una tecnología para reducir este tiempo y hacer que el cambio entre un par de subprocesos sea mucho más rápido. Intel llama a su tecnología Hyper-Threading . Conocido genéricamente como multihilo simultáneo (SMT) .

Si bien el par de hilos no se ejecuta simultáneamente, el cambio es tan suave y rápido que ambos hilos parecen ser prácticamente simultáneos. Esto funciona tan bien que cada núcleo se presenta como un par de núcleos virtuales para el sistema operativo. Por lo tanto, una CPU habilitada para SMT con cuatro núcleos físicos, por ejemplo, se presentará al SO como una CPU de ocho núcleos.

Todavía hay algunos gastos generales por cambiar incluso entre dichos núcleos virtuales optimizados. Entonces, un administrador del sistema puede activar un interruptor en la máquina para desactivar SMT si ella decide que beneficiaría a sus usuarios que ejecutan una aplicación que está inusualmente vinculada a la CPU con muy pocas oportunidades de pausa. En tal caso, volvemos a su pregunta original: En esta situación especial, desearía restringir las operaciones para que no tengan más de estos subprocesos hiperactivos que los núcleos físicos. Pero permítanme repetir: esta es una situación extremadamente inusual que podría ocurrir en algo así como un proyecto científico especializado de procesamiento de datos, pero casi nunca se aplicaría a los escenarios corporativos / empresariales comunes.

    
respondido por el Basil Bourque 08.11.2017 - 09:46
7

En los viejos tiempos, la memoria no estaba virtualizada ni protegida y cualquier código podía escribir en cualquier lugar. En aquellos días, un hilo a un diseño de CPU tenía sentido. En las décadas posteriores, la memoria primero se protegió y luego se virtualizó. Piense en los hilos como núcleos virtuales: una especie de promesa de que en algún momento cuando sus datos y su código estuvieran listos, ese hilo se insertó ( o programado como los ingenieros y matemáticos de PHD que realizan investigaciones sobre algoritmos de programación, lo llaman ) en una CPU real para hacer el trabajo real.

Ahora,debidoalamagnituddeladiferenciaeneltiempo,laCPUyelcachéfuncionantanrápidoencomparaciónconlaobtencióndedatosdesdeelalmacenamientoolared,quemilesdesubprocesospuedenaparecerydesaparecermientrasunhiloesperaporwww.google.comparaentregarunpaqueteodosdedatos,porloquevemuchosmássubprocesosquelaCPUreal.

Siconviertelasoperacionesdesubprocesosquesucedenenlaescaladetiempoazul/negroylasconvierteaunsegundo=1ns,lascosasquenosinteresansonmáscomoqueeldiscoIOtome100microsegundosescomo4díasyunarondadeInternetde200mselviajeesunretrasode20añossiestácontandosegundosenlaescaladetiempodelaCPU.Aligualqueen muchos ejercicios de diez ejercicios , en la mayoría de los casos, la CPU está inactiva durante "meses" a la espera de un trabajo significativo de un mundo externo muy, muy lento.

No parece que haya nada mal en la imagen que publicaste, por lo que quizás no entendamos bien a qué te refieres al preguntarte sobre temas.

Si hace clic con el botón derecho (clic con el botón de control) en los hilos de palabras en la fila del encabezado en la parte superior, agregue el estado de la aplicación y verá que la mayoría de los hilos probablemente estén inactivos, inactivos, no ejecutándose en un momento dado.

    
respondido por el bmike 08.11.2017 - 05:05
1

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.

    
respondido por el David Richerby 09.11.2017 - 12:15

Lea otras preguntas en las etiquetas