procesos ligeros hilos hebras ejercicios c multithreading pthreads

hebras - ¿Por qué los hilos se denominan procesos ligeros?



procesos ligeros hilos o hebras (6)

La afirmación de que los hilos son "ligeros" es, dependiendo de la plataforma, no necesariamente confiable.

Un subproceso del sistema operativo debe admitir la ejecución de código nativo, por ejemplo, escrito en C. Por lo tanto, debe proporcionar una pila de tamaño decente, generalmente medida en megabytes. Por lo tanto, si inicia 1000 subprocesos (quizás en un intento de admitir 1000 conexiones simultáneas a su servidor) tendría un requisito de memoria de 1 GB en su proceso antes de comenzar a realizar cualquier trabajo real.

Este es un problema real en servidores altamente escalables, por lo que no usan subprocesos como si fueran ligeros. Los tratan como recursos de peso pesado. En su lugar, pueden crear un número limitado de subprocesos en un grupo y dejar que tomen elementos de trabajo de una cola.

Como esto significa que los subprocesos son de larga duración y pequeños en número, podría ser mejor usar procesos. De esa manera, obtiene un aislamiento del espacio de direcciones y realmente no hay problema con quedarse sin recursos.

En resumen: desconfíe de las afirmaciones de "marketing" hechas en nombre de hilos. El procesamiento paralelo es excelente (cada vez será más esencial), pero los subprocesos son solo una forma de lograrlo.

Un hilo es "ligero" porque la mayor parte de los gastos generales ya se han logrado mediante la creación de su proceso.

Encontré esto en uno de los tutoriales.

¿Alguien puede elaborar lo que significa exactamente?


La creación del proceso es "costosa", porque tiene que configurar un nuevo espacio de memoria virtual completo para el proceso con su propio espacio de direcciones. "caro" significa que requiere mucho tiempo de CPU.

Los hilos no necesitan hacer esto, solo cambian algunos puntos alrededor, por lo que es mucho más "barato" que crear un proceso. La razón por la que los subprocesos no necesitan esto es porque se ejecutan en el espacio de direcciones y en la memoria virtual del proceso principal.

Cada proceso debe tener al menos un hilo. Entonces, si lo piensas bien, crear un proceso significa crear el proceso Y crear un hilo. Obviamente, crear solo un hilo tomará menos tiempo y trabajo con la computadora.

Además, los hilos son "ligeros" porque los hilos pueden interactuar sin la necesidad de comunicación entre procesos. Cambiar entre subprocesos es "más barato" que cambiar entre procesos (de nuevo, simplemente moviendo algunos punteros). Y la comunicación entre procesos requiere una comunicación más costosa que los hilos.


Los subprocesos dentro de un proceso comparten el mismo espacio de memoria virtual, pero cada uno tiene una pila separada, y posiblemente "almacenamiento local de subprocesos" si se implementa. Son ligeros porque un cambio de contexto es simplemente un caso de cambiar el puntero de la pila y el contador del programa y restaurar otros registros, cuando un cambio de contexto del proceso implica cambiar también el contexto de la MMU.

Además, la comunicación entre hilos dentro de un proceso es ligera porque comparten un espacio de direcciones.


Sólo porque los hilos comparten el espacio de memoria común . La memoria asignada al hilo principal será compartida por todos los otros hilos secundarios. Mientras que en el caso de Proceso, el proceso hijo necesita asignar el espacio de memoria separado.


Un proceso contiene uno o más subprocesos y un subproceso puede hacer cualquier cosa que un proceso pueda hacer. Además, los subprocesos dentro de un proceso comparten el mismo espacio de direcciones debido a que el costo de la comunicación entre los subprocesos es bajo, ya que utiliza la misma sección de código, sección de datos y recursos del sistema operativo, por lo que todas estas características del subproceso lo convierten en un "proceso ligero".


proceso:

  1. identificacion de proceso
  2. ambiente
  3. carpeta
  4. registros
  5. apilar
  6. montón
  7. descriptor de archivo
  8. bibliotecas compartidas
  9. Instrumentos de comunicaciones entre procesos (tuberías, semáforos, colas, memoria compartida, etc.).
  10. fuentes específicas del sistema operativo

hilo:

  1. apilar
  2. registros
  3. atributos (para sheduler, como prioridad, política, etc.)
  4. datos específicos del hilo
  5. fuentes específicas del sistema operativo