what una threaded thread single que programming multihilo language cooperative aplicacion multithreading process multicore

multithreading - una - thread os



Hilos y procesos Vs MultiThreading y Multi-Core/MultiProcessor: ¿Cómo están mapeados? (7)

  1. En términos generales, sí, pero "paralelo" puede significar cosas diferentes.

  2. Depende de qué tareas quiera ejecutar en paralelo.

  3. No necesariamente. Algunos hilos (de hecho la mayoría) pasan mucho tiempo sin hacer nada. También podría cambiar de ellos a un hilo que quiere hacer algo.

  4. El sistema operativo maneja el cambio de hilo. Delegará en diferentes núcleos si así lo desea. Si solo hay un núcleo, dividirá el tiempo entre los diferentes hilos y procesos.

  5. La cantidad de subprocesos está limitada por software y hardware. Los subprocesos consumen procesador y memoria en diversos grados según lo que estén haciendo. El software de gestión de hilos también puede imponer sus propios límites.

Estaba muy confundido pero el siguiente hilo despejó mis dudas:

Multiproceso, Multithreading, HyperThreading, Multi-core

Pero aborda las consultas desde el punto de vista del hardware. Quiero saber cómo se asignan estas funciones de hardware al software?

Una cosa que es obvia es que no hay diferencia entre MultiProcessor (= Mutlicpu) y MultiCore aparte de que en multinúcleo todas las CPUs residen en un chip (dado) donde, como en el multiprocesador, todas las CPU están en sus propios chips y conectadas entre sí.

Entonces, los sistemas mutlicore / multiprocesador son capaces de ejecutar múltiples procesos (firefox, mediaplayer, googletalk) al "mismo tiempo" (a diferencia del contexto que cambia estos procesos en un solo sistema de procesador) ¿Correcto?

Si es correcto Estoy claro hasta ahora. Pero la confusión surge cuando el multihilo entra en la imagen.

  1. MultiThreading "es para" procesamiento paralelo. ¿derecho?

  2. ¿Cuáles son los elementos que están involucrados en multihilo dentro de la CPU? ¿diagrama? Para que pueda explotar el poder del procesamiento paralelo de dos tareas independientes, ¿cuáles deberían ser los requisitos de la CPU?

  3. Cuando la gente dice el cambio de contexto de los hilos. Realmente no lo entiendo porque si su contexto cambia de hilos, entonces no es un procesamiento paralelo. los hilos deben ejecutarse "scrictly simultáneamente". ¿derecho?

    Mi noción de multihilo es eso: considerando un sistema con una sola CPU. cuando el proceso se cambia de contexto a Firefox. (supongamos) cada pestaña de firefox es un hilo y todos los hilos se ejecutan estrictamente al mismo tiempo. No es como si un hilo se hubiera ejecutado por algún tiempo, entonces otra vez se ha llevado otro hilo hasta que llega el momento del cambio de contexto.

  4. ¿Qué sucede si ejecuto un software multiproceso en un procesador que no puede manejar los hilos? Quiero decir, ¿cómo maneja la CPU ese software?

  5. Si todo está bien hasta ahora, ahora la pregunta es ¿CUANTOS HILOS? Debe estar limitado por hardware, supongo. Si el hardware puede admitir solo 2 hilos y yo comienzo 10 hilos en mi proceso. ¿Cómo lo manejaría la CPU? ¿Pros contras? Desde el punto de vista de la ingeniería del software, mientras se desarrolla un software que los usuarios utilizarán en una amplia variedad de sistemas, ¿cómo decidiría si hago un multihilo? si es así, ¿cuántos hilos?


Creo que las respuestas hasta ahora son más o menos al punto y le dan un buen contexto básico. Básicamente, digamos que tienes un procesador de cuatro núcleos, pero cada núcleo es capaz de ejecutar dos hilos simultáneos.

Tenga en cuenta que solo hay un ligero aumento (o ningún aumento) de la velocidad si está ejecutando 2 subprocesos simultáneos en 1 núcleo en lugar de ejecutar el primer subproceso y luego el segundo subproceso verticalmente. Sin embargo, cada núcleo físico agrega velocidad a su flujo de trabajo general.

Ahora, digamos que tiene un proceso ejecutándose en su sistema operativo que tiene múltiples hilos (es decir, necesita ejecutar varias cosas en "paralelo") y tiene algún tipo de pila de tareas en una cola (o algún otro sistema con reglas de prioridad). Luego el software envía tareas a una cola y su procesador intenta ejecutarlas tan rápido como sea posible. Ahora tienes 2 casos:

  1. Si un software admite el multiprocesamiento, las tareas se enviarán a cualquier procesador disponible (que no está haciendo nada o simplemente ha terminado de hacer otro trabajo y el envío de trabajo desde su software es el primero en una cola).
  2. Si su software no admite multiprocesamiento, todos sus trabajos se realizarán de manera similar, pero solo en uno de sus núcleos.

Sugiero leer la página de Wikipedia en el hilo. La primera imagen allí ya te da una buena idea. :)


La clave para recordar es la separación entre el paralelismo lógico / virtual y el paralelismo real / hardware. Con su SO promedio, se realiza una llamada al sistema para engendrar un nuevo hilo. Lo que sucede en realidad (ya sea que esté mapeado en un núcleo diferente, un hilo de hardware diferente en el mismo núcleo o en cola en el conjunto de subprocesos de software) depende del sistema operativo.

  1. El procesamiento paralelo utiliza todos los métodos, no solo los multi-threading.
  2. En términos generales, si desea tener un procesamiento paralelo real, debe realizarlo en hardware. Tomemos el ejemplo del Niagara , tiene hasta 8 núcleos cada uno capaz de ejecutar 4 hilos en hardware.
  3. La conmutación de contexto es necesaria cuando hay más hilos de los que se pueden ejecutar en paralelo en el hardware. Incluso entonces, cuando se ejecutan en serie (cambiando de un hilo a otro), se consideran concurrentes porque no hay garantía en el orden de cambio. Por lo tanto, puede ir a T0, T1, T2, T1, T3, T0, T2, etc. Para todos los efectos, los hilos son paralelos.
  4. Rebanado de tiempo
  5. Eso dependería del sistema operativo.

Múltiples hilos son "cadenas" de comandos separadas dentro de un proceso. Desde el punto de vista de la CPU, los hilos son más o menos procesos similares. Cada hilo tiene su propio conjunto de registros y su propia pila.

La razón por la que puede tener más hilos que CPU es porque la mayoría de los hilos no necesitan CPU todo el tiempo. El hilo puede esperar la entrada del usuario, descargar algo de la web o escribir en el disco. Mientras lo hace, no necesita CPU, por lo que la CPU puede ejecutar otros hilos.

En tu ejemplo, cada pestaña de Firefox probablemente puede tener varios hilos. O pueden compartir algunos hilos. Necesita uno para descargar, uno para renderizar, uno para bucle de mensajes (entrada del usuario) y quizás uno para ejecutar Javascript. No puedes combinarlos fácilmente porque, mientras descargas, todavía tienes que reaccionar ante la entrada del usuario. Sin embargo, el hilo de descarga está durmiendo la mayor parte del tiempo, e incluso cuando se está descargando necesita CPU solo ocasionalmente, y la cadena de mensajes solo se activa al presionar un botón.

Si vas al administrador de tareas, verás que a pesar de todos estos hilos, el uso de tu CPU aún es bastante bajo.

Por supuesto, si todos sus subprocesos realizan algunas tareas de procesamiento de números, entonces no debe crear demasiados ya que no obtiene ningún beneficio de rendimiento (¡aunque puede haber beneficios arquitectónicos!).

Sin embargo, si están vinculados principalmente con E / S, entonces crea tantos hilos como dicte tu arquitectura. Es difícil dar consejos sin conocer su tarea particular.


Multithreading es la ejecución de más de un hilo a la vez. Puede suceder tanto en procesadores de núcleo único como en sistemas de procesadores multinúcleo. Para sistemas de procesador único, el cambio de contexto lo afecta. ¡Mira! La conmutación de contexto en este entorno computacional se refiere a la división de tiempo por el sistema operativo. Por lo tanto, no te confundas. El sistema operativo es el que controla la ejecución de otros programas. Permite que un programa se ejecute en la CPU a la vez. Pero la frecuencia con la que los hilos entran y salen de la CPU determina la transparencia del paralelismo exhibido por el sistema.

En el entorno multinúcleo, el multihilo se produce cuando cada núcleo ejecuta un hilo. Aunque, en multinúcleo de nuevo, puede producirse un cambio de contexto en los núcleos individuales.


Primero, intente comprender el concepto de ''proceso'' y ''hilo''. Un hilo es una unidad básica para la ejecución: un hilo está programado por el sistema operativo y ejecutado por la CPU. Un proceso es una especie de contenedor que contiene múltiples hilos.

  1. Sí, ya sea multiprocesamiento o multihilo es para procesamiento paralelo. Más precisamente, para explotar el paralelismo a nivel de hilo.

  2. Bien, multi-threading podría significar hardware multi-threading (un ejemplo es HyperThreading). Pero, supongo que solo dices multiproceso en el software. En este sentido, la CPU debe admitir el cambio de contexto.

  3. La conmutación de contexto es necesaria para implementar la multitarea incluso en un núcleo físicamente único por división de tiempo.

  4. Supongamos que hay dos núcleos físicos y cuatro hilos muy ocupados. En este caso, dos subprocesos solo esperan hasta que tengan la oportunidad de usar CPU. Lea algunos artículos relacionados con la programación preventiva del sistema operativo.

  5. El número de subprocesos que se pueden ejecutar físicamente simultáneamente es idéntico al número de procesadores lógicos . Está solicitando un problema general de programación de hilos en la literatura del sistema operativo, como round-robin.

Le sugiero que estudie los principios básicos del sistema operativo primero. Luego avance en problemas de subprocesos múltiples. Parece que todavía no está claro cuáles son los conceptos clave, como el cambio de contexto y la programación. Te llevará un par de meses, pero si realmente quieres ser un experto en software, entonces debes conocer conceptos tan básicos. Por favor, tome los diagramas de libros y conferencias del sistema operativo.


Los hilos que se ejecutan en el mismo núcleo no son técnicamente paralelos. Solo parecen ejecutarse en paralelo, ya que la CPU cambia entre ellos muy rápido (para nosotros, los humanos). Este interruptor es lo que se llama cambio de contexto. Ahora, los hilos que se ejecutan en diferentes núcleos se ejecutan en paralelo. La mayoría de las CPU modernas tienen varios núcleos, sin embargo, la mayoría de los sistemas operativos modernos (Windows, Linux y amigos) generalmente ejecutan un número mucho mayor de subprocesos, lo que aún causa cambios de contexto. Incluso si no se ejecuta ningún programa de usuario, el sistema operativo en sí mismo realiza los cambios de contexto para el trabajo de mantenimiento.
Esto debería responder 1-3.

Alrededor de 4: básicamente, cada procesador puede trabajar con hilos. es mucho más una característica del sistema operativo. El hilo es básicamente: memoria (opcional), pila y registros, una vez que se reemplazan, se encuentra en otro hilo.

5: el número de subprocesos es bastante alto y está limitado por el sistema operativo. Por lo general, es más alto de lo que el programador normal puede manejar con éxito :) El número de subprocesos viene dictado por su programa:

¿Está atado IO?

  • ¿Puede la tarea dividirse en varias tareas más pequeñas?
  • ¿Qué tan pequeña es la tarea? la tarea puede ser demasiado pequeña para que valga la pena engendrar hilos.
  • Sincronización: si se requiere sincronización extensa, la penalización puede ser demasiado pesada y se debe reducir el número de subprocesos.