Pregunta ¿Cuál es la diferencia entre un proceso y un hilo?


¿Cuál es la diferencia técnica entre un proceso y un hilo?

Me da la sensación de que una palabra como 'proceso' se usa en exceso y también hay hilos de hardware y software. ¿Qué hay de los procesos ligeros en idiomas como Erlang? ¿Hay alguna razón definitiva para usar un término sobre el otro?


1225
2017-10-14 09:13


origen


Respuestas:


Ambos procesos e hilos son secuencias independientes de ejecución. La diferencia típica es que los subprocesos (del mismo proceso) se ejecutan en un espacio de memoria compartido, mientras que los procesos se ejecutan en espacios de memoria separados.

No estoy seguro de qué hilos de "hardware" vs "software" podrían estar refiriéndose. Los subprocesos son una característica de entorno operativo, en lugar de una característica de CPU (aunque la CPU generalmente tiene operaciones que hacen que los subprocesos sean eficientes).

Erlang usa el término "proceso" porque no expone un modelo de multiprogramación de memoria compartida. Llamarlos "hilos" implicaría que tienen memoria compartida.


1111
2017-10-14 09:15



Proceso
Cada proceso proporciona los recursos necesarios para ejecutar un programa. Un proceso tiene un espacio de direcciones virtuales, código ejecutable, manejadores abiertos a objetos del sistema, un contexto de seguridad, un identificador de proceso único, variables de entorno, una clase de prioridad, tamaños de conjunto de trabajo mínimo y máximo y al menos un hilo de ejecución. Cada proceso se inicia con un solo subproceso, a menudo llamado subproceso principal, pero puede crear subprocesos adicionales desde cualquiera de sus subprocesos.

Hilo
Un hilo es una entidad dentro de un proceso que puede programarse para su ejecución. Todos los hilos de un proceso comparten su espacio de direcciones virtuales y recursos del sistema. Además, cada subproceso mantiene controladores de excepciones, una prioridad de programación, almacenamiento local de subprocesos, un identificador de subproceso único y un conjunto de estructuras que el sistema utilizará para guardar el contexto del subproceso hasta que se programe. El contexto de subproceso incluye el conjunto de registros de máquina del subproceso, la pila de kernel, un bloque de entorno de subproceso y una pila de usuario en el espacio de direcciones del proceso del subproceso. Los subprocesos también pueden tener su propio contexto de seguridad, que se puede usar para suplantar a los clientes.


Encontré esto en MSDN aquí:
Acerca de procesos y subprocesos 

Microsoft Windows admite la multitarea preventiva, que crea el efecto de la ejecución simultánea de múltiples subprocesos desde múltiples procesos. En una computadora multiprocesador, el sistema puede ejecutar simultáneamente tantos hilos como procesadores en la computadora.


634
2017-10-14 09:43



Proceso:

  • Una instancia de ejecución de un programa se denomina proceso.
  • Algunos sistemas operativos usan el término 'tarea' para referirse a un programa que se está ejecutando.
  • Un proceso siempre se almacena en la memoria principal también denominada memoria primaria o memoria de acceso aleatorio.
  • Por lo tanto, un proceso se denomina como una entidad activa. Desaparece si la máquina se reinicia.
  • Varios procesos pueden estar asociados con un mismo programa.
  • En un sistema multiprocesador, múltiples procesos se pueden ejecutar en paralelo.
  • En un sistema de procesador único, aunque no se logra el paralelismo verdadero, se aplica un algoritmo de programación de proceso y el procesador está programado para ejecutar cada proceso de a uno, produciendo una ilusión de concurrencia.
  • Ejemplo: Ejecutando múltiples instancias del programa 'Calculadora'. Cada una de las instancias se denomina proceso.

Hilo:

  • Un hilo es un subconjunto del proceso.
  • Se denomina 'proceso liviano', ya que es similar a un proceso real, pero se ejecuta dentro del contexto de un proceso y comparte los mismos recursos asignados al proceso por el kernel.
  • Generalmente, un proceso tiene solo un hilo de control: un conjunto de instrucciones de máquina que se ejecutan a la vez.
  • Un proceso también puede estar compuesto por múltiples hilos de ejecución que ejecutan instrucciones simultáneamente.
  • Múltiples hilos de control pueden explotar el verdadero paralelismo posible en sistemas multiprocesador.
  • En un sistema de procesador único, se aplica un algoritmo de programación de hilos y el procesador está programado para ejecutar cada hilo de a uno por vez.
  • Todos los subprocesos que se ejecutan dentro de un proceso comparten el mismo espacio de direcciones, descriptores de archivos, pila y otros atributos relacionados con el proceso.
  • Como los hilos de un proceso comparten la misma memoria, la sincronización del acceso a los datos compartidos dentro del proceso adquiere una importancia sin precedentes.

Pedí prestada la información anterior de la Búsqueda de conocimiento! Blog.


218
2018-03-19 14:17



Primero, veamos el aspecto teórico. Debe entender qué es conceptualmente un proceso para comprender la diferencia entre un proceso y un hilo y qué se comparte entre ellos.

Tenemos lo siguiente de la sección 2.2.2 El modelo de hilo clásico en Sistemas operativos modernos 3e por Tanenbaum:

El modelo de proceso se basa en dos conceptos independientes: recurso   agrupación y ejecución. Algunas veces es útil separarlos;   aquí es donde entran los hilos ...

Él continúa:

Una forma de ver un proceso es que es una forma de   agrupar recursos relacionados juntos. Un proceso tiene un espacio de direcciones   que contiene el texto y los datos del programa, así como otros recursos. Estas   el recurso puede incluir archivos abiertos, procesos secundarios, alarmas pendientes,   manejadores de señal, información de contabilidad y más. Al ponerlos   juntos en la forma de un proceso, pueden ser manejados más fácilmente.   El otro concepto que tiene un proceso es un hilo de ejecución, generalmente   acortado a solo hilo. El hilo tiene un contador de programa que mantiene   rastrear qué instrucción ejecutar a continuación. Tiene registros, que   mantener sus variables de trabajo actuales. Tiene una pila, que contiene el   historial de ejecución, con un cuadro para cada procedimiento llamado pero no   aún regresado de. Aunque un hilo debe ejecutarse en algún proceso, el   hilo y su proceso son conceptos diferentes y pueden ser tratados   por separado. Los procesos se usan para agrupar recursos; trapos   son las entidades programadas para la ejecución en la CPU.

Más abajo, proporciona la siguiente tabla:

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

Vamos a lidiar con el hardware multihilo problema. Clásicamente, una CPU admitiría un solo hilo de ejecución, manteniendo el estado del hilo a través de un único contador de programa y un conjunto de registros. ¿Pero qué pasa si hay una falta de caché? Lleva mucho tiempo recuperar datos de la memoria principal, y mientras eso sucede, la CPU permanece inactiva. Así que alguien tuvo la idea de tener básicamente dos conjuntos de estado de subproceso (PC + registros) para que otro subproceso (quizás en el mismo proceso, tal vez en un proceso diferente) pueda realizar el trabajo mientras el otro subproceso está esperando en la memoria principal. Hay varios nombres e implementaciones de este concepto, como HyperThreading y Multithreading simultáneo (SMT para abreviar).

Ahora veamos el lado del software. Básicamente hay tres formas en que los hilos pueden implementarse en el lado del software.

  1. Temas de espacio de usuario
  2. Kernel Threads
  3. Una combinación de los dos

Todo lo que necesita para implementar subprocesos es la capacidad de guardar el estado de la CPU y mantener varias pilas, lo que en muchos casos puede hacerse en el espacio del usuario. La ventaja de los subprocesos de espacio de usuario es la conmutación súper rápida de subprocesos, ya que no tiene que atrapar el núcleo y la capacidad de programar sus subprocesos de la manera que desee. El mayor inconveniente es la imposibilidad de bloquear E / S (lo que bloquearía todo el proceso y todos sus hilos de usuario), que es una de las principales razones por las que usamos hilos en primer lugar. El bloqueo de E / S utilizando hilos simplifica en gran medida el diseño del programa en muchos casos.

Los subprocesos Kernel tienen la ventaja de poder usar E / S de bloqueo, además de dejar todos los problemas de programación al sistema operativo. Pero cada cambio de hilo requiere atrapar en el kernel, que es potencialmente relativamente lento. Sin embargo, si está intercambiando subprocesos debido a la E / S bloqueada, esto no es realmente un problema ya que la operación de E / S probablemente ya lo atrapó en el kernel.

Otro enfoque es combinar los dos, con múltiples hilos del kernel, cada uno con múltiples hilos de usuario.

Volviendo a su cuestión de terminología, puede ver que un proceso y un hilo de ejecución son dos conceptos diferentes y su elección de qué término usar depende de lo que está hablando. En cuanto al término "proceso de peso liviano", personalmente no veo el punto, ya que realmente no transmite lo que está sucediendo, así como el término "hilo de ejecución".


90
2017-10-22 12:42



Para explicar más con respecto a la programación concurrente

  1. Un proceso tiene un entorno de ejecución autónomo. Un proceso generalmente tiene un conjunto completo y privado de recursos básicos en tiempo de ejecución; en particular, cada proceso tiene su propio espacio de memoria.

  2. Los hilos existen dentro de un proceso; cada proceso tiene al menos uno. Los subprocesos comparten los recursos del proceso, incluida la memoria y los archivos abiertos. Esto lo convierte en una comunicación eficiente, pero potencialmente problemática.

Mantener a la persona promedio en mente,

En su computadora, abra Microsoft Word y el navegador web. Llamamos a estos dos procesos.

En Microsoft Word, escribe algo y se guarda automáticamente. Ahora, habría observado que la edición y el guardado ocurren en paralelo: edición en un hilo y guardado en el otro hilo.


57
2017-12-24 07:04



Una aplicación consiste en uno o más procesos. Un proceso, en los términos más simples, es un programa de ejecución. Uno o más subprocesos se ejecutan en el contexto del proceso. Un hilo es la unidad básica a la cual el sistema operativo asigna el tiempo del procesador. Un hilo puede ejecutar cualquier parte del código de proceso, incluidas las partes que se están ejecutando actualmente por otro hilo. Una fibra es una unidad de ejecución que debe ser programada manualmente por la aplicación. Las fibras se ejecutan en el contexto de los hilos que las programan.

Robado de aquí.


40
2017-10-14 09:16



Un proceso es una colección de código, memoria, datos y otros recursos. Un hilo es una secuencia de código que se ejecuta dentro del alcance del proceso. Puede (generalmente) tener múltiples hilos ejecutándose simultáneamente dentro del mismo proceso.


22
2017-10-14 09:30



  • Cada proceso es un hilo (hilo primario).
  • Pero cada hilo no es un proceso. Es una parte (entidad) de un proceso.

21
2017-08-09 20:28



Un proceso es una instancia de ejecución de una aplicación. Qué significa eso? Bueno, por ejemplo, cuando hace doble clic en el icono de Microsoft Word, inicia un proceso que ejecuta Word. Un hilo es un camino de ejecución dentro de un proceso. Además, un proceso puede contener múltiples hilos. Cuando inicia Word, el sistema operativo crea un proceso y comienza a ejecutar el hilo principal de ese proceso.

Es importante tener en cuenta que un hilo puede hacer cualquier cosa que un proceso pueda hacer. Pero dado que un proceso puede consistir en múltiples hilos, un hilo podría considerarse un proceso 'liviano'. Por lo tanto, la diferencia esencial entre un hilo y un proceso es el trabajo que cada uno se utiliza para lograr. Los subprocesos se utilizan para tareas pequeñas, mientras que los procesos se utilizan para tareas más "pesadas", básicamente, la ejecución de aplicaciones.

Otra diferencia entre un hilo y un proceso es que los hilos dentro del mismo proceso comparten el mismo espacio de direcciones, mientras que los procesos diferentes no lo hacen. Esto permite que los hilos lean y escriban en las mismas estructuras de datos y variables, y también facilita la comunicación entre hilos. La comunicación entre procesos, también conocida como IPC, o comunicación entre procesos, es bastante difícil y consume muchos recursos.


17
2018-03-14 05:09



Ejemplo del mundo real para procesos y subprocesos Esto te dará la idea básica sobre el hilo y el proceso enter image description here

Tomé prestada la información anterior de la respuesta de Scott Langham - Gracias


14
2017-12-06 23:24