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

Aquí está la analogía que uso en Linux Kernel Development. Los procesos son la abstracción de los programas en ejecución : una imagen binaria, memoria virtualizada, varios recursos del núcleo, un contexto de seguridad asociado, etc. Los subprocesos son la unidad de ejecución en un proceso : un procesador virtualizado, una pila y el estado del programa. Dicho de otra manera, los procesos ejecutan binarios y los subprocesos son la unidad de ejecución más pequeña programable por el programador de procesos de un sistema operativo.

Un proceso contiene uno o más hilos. En procesos de subproceso único, el proceso contiene un subproceso. Puede decir que el hilo es el proceso: hay una cosa que está sucediendo. En los procesos de subprocesos múltiples, el proceso contiene más de un subproceso; hay más de una cosa en curso.

Las dos abstracciones virtualizadas principales en los sistemas operativos modernos son la memoria virtualizada y un procesador virtualizado. Ambos brindan la ilusión de ejecutar procesos que solo ellos consumen los recursos de la máquina. La memoria virtualizada brinda a los procesos una vista única de la memoria que se asigna perfectamente a la RAM física o al almacenamiento en disco (espacio de intercambio). Un procesador virtualizado permite que los procesos actúen como si solo se ejecutaran en un procesador, cuando de hecho múltiples procesos son multitarea en múltiples procesadores.

La memoria virtualizada está asociada con el proceso y no con el hilo. Por lo tanto, los hilos comparten un espacio de direcciones de memoria. Por el contrario, un procesador virtualizado distinto está asociado con cada subproceso. Cada hilo es una entidad programable independiente.

¿Cuál es el punto de? Obviamente necesitamos procesos. Pero, ¿por qué introducir el concepto separado de un hilo y permitir procesos multiproceso? Hay cuatro beneficios principales para el subprocesamiento múltiple:

  • Programación de abstracción . Dividir el trabajo y asignar cada división a una unidad de ejecución (un hilo) es un enfoque natural para muchos problemas. Los patrones de programación que utilizan este enfoque incluyen los patrones de reactor , hilo por conexión y grupo de hilos . Sin embargo, algunos ven los hilos como un antipatrón. El inimitable Alan Cox resumió esto bien con la cita, “los hilos son para personas que no pueden programar máquinas de estado”.
  • Paralelismo En máquinas con múltiples procesadores, los hilos proporcionan una manera eficiente de lograr un verdadero paralelismo . Como cada subproceso recibe su propio procesador virtualizado y es una entidad programable de forma independiente, pueden ejecutarse múltiples subprocesos en múltiples procesadores al mismo tiempo, mejorando el rendimiento de un sistema. En la medida en que los subprocesos se utilizan para lograr paralelismo, es decir, no hay más subprocesos que procesadores, no se aplica la cita “subprocesos para personas que no pueden programar máquinas de estado”.
  • Bloqueo de E / S. Sin hilos, el bloqueo de E / S detiene todo el proceso. Esto puede ser perjudicial tanto para el rendimiento como para la latencia. En un proceso multiproceso, los subprocesos individuales pueden bloquearse, esperando E / S, mientras que otros subprocesos avanzan. Las E / S asincrónicas y sin bloqueo son soluciones alternativas a los subprocesos para este problema.
  • Ahorro de memoria . Los subprocesos proporcionan una forma eficiente de compartir memoria y, al mismo tiempo, utilizan múltiples unidades de ejecución. De esta manera son una alternativa a múltiples procesos.

El costo de estos beneficios del enhebrado es una mayor complejidad en la forma de necesitar gestionar la concurrencia a través de mecanismos tales como mutexes y variables de condición. Dada la creciente tendencia hacia los procesadores con múltiples núcleos y sistemas con múltiples procesadores, el enhebrado solo se convertirá en una herramienta más importante en la programación de sistemas.

Proceso

Un proceso es simplemente un programa en ejecución. Por ejemplo, un programa de WordPad utilizado para editar un documento es un proceso.

Podría haber múltiples procesos ejecutándose en una computadora al mismo tiempo, por ejemplo: Media Player reproduciendo una película, un editor de texto editando un documento, etc.

Hilo

Mientras que un hilo es parte de un programa que se ejecuta simultáneamente con otras partes del programa. Por ejemplo, cuando está utilizando el programa WordPad, puede editar un documento y también puede imprimir otro documento al mismo tiempo.

Esto solo es posible debido a múltiples hilos en ejecución al mismo tiempo en el programa WordPad, donde un hilo se encarga de editar el documento y otro hilo después de imprimir un documento.

Para obtener más información sobre subprocesos y sus diversas características importantes con ejemplos de código simples, puede ver Subprocesos en Java – Decodejava.com

¡La mejor de las suertes!

Hay varias diferencias entre un hilo y un proceso:

  1. Cada proceso tiene su propio código, datos y contexto del núcleo (estructuras VM, tabla de descriptores, etc.). Mientras que los hilos de un proceso, comparten el mismo código, datos y contexto del núcleo.
  2. Los procesos generalmente forman una jerarquía de árbol. P0 engendrando P1 y así sucesivamente. Si bien todos los hilos de un proceso son pares.
  3. El cambio de contexto del proceso es mucho más pesado que un cambio de contexto de subproceso para el núcleo del sistema operativo porque hay mucho más estado para cambiar.

Proceso: es una instancia de ejecución de una aplicación. Se ejecutan en un espacio de memoria separado a diferencia de los hilos

Subprocesos: son la ruta de ejecución dentro de un proceso. Los subprocesos dentro del mismo proceso se ejecutan en un espacio de memoria compartida.

Las siguientes cosas se comparten con otros hilos:

  1. Sección de código
  2. Sección de datos (o segmento de datos, p. Ej., Las variables globales y estáticas se almacenan en segmentos de datos compartidos por todos los hilos)
  3. Recursos del sistema operativo (p. Ej., Archivos y señales abiertos)
  4. Espacio de direcciones (espacio de memoria compartida)

Pero al igual que Process, los hilos tienen su propio:

  1. Contador de programa (PC)
  2. Conjunto de registro
  3. Pila de espacio.

El proceso es una colección de hilos, es decir, el hilo es una pequeña parte del proceso.

Hay una diferencia básica entre ellos:

  1. El proceso puede dividirse en partes, se denominan hilo.
  2. Los hilos son una pequeña unidad de proceso.
  3. Se puede construir un programa o proceso con múltiples hilos, estos se pueden ejecutar en tiempo paralelo.
  4. El hilo es un proceso ligero. El proceso es como una tarea.
  5. El proceso tiene su propio espacio de direcciones, mientras que el hilo tiene la dirección de su proceso.

Los hilos del núcleo se programan dentro del núcleo del sistema operativo.

Los subprocesos de usuario se programan en el espacio de usuario por el propio proceso. Por lo general, estos se proporcionan como una característica de un lenguaje de computadora.

En la práctica, las diferencias son estas:

  1. Las pisadas del kernel se pueden programar en diferentes CPU en un sistema multiprocesador. Para subprocesos de usuario, esto no ocurre (pero ver más abajo).
  2. Los hilos del kernel interactúan de manera inteligente con los subsistemas de E / S del kernel. Esto significa que mientras uno de sus hilos espera en E / S, los otros continuarán ejecutándose. (Esto es mucho más complicado con hilos de usuario. Algunos idiomas pueden sortear esta limitación mediante el uso de mecanismos de tipo select / epoll, pero requiere que la biblioteca de E / S se escriba teniendo esto en cuenta).

Los procesos ligeros son una idea relacionada. Por lo general, implica una gran cantidad de subprocesos de usuario que se ejecutan en un sistema optimizado para un recuento de subprocesos muy alto y una biblioteca de E / S sofisticada para que coincida. Erlang (lenguaje de programación) es un sistema de este tipo.

También tenga en cuenta que algunas arquitecturas de subprocesos de usuario y LWP se ejecutan en múltiples subprocesos del núcleo, pero tal vez no en una relación uno a uno. Funciona así: crea un hilo de kernel por CPU en el sistema. Esto permite que su programa aproveche múltiples CPU. Sin embargo, aún ejecuta subprocesos de usuario con LWP, que se multiplexan sobre esos subprocesos del núcleo. En teoría, esto te da lo mejor de ambos mundos. Nuevamente, el sistema Erlang es un ejemplo de esta arquitectura.

Un proceso puede contener múltiples hilos . En la mayoría de los sistemas operativos de subprocesos múltiples, un proceso obtiene su propio espacio de direcciones de memoria; un hilo no lo hace. Los subprocesos suelen compartir el montón que pertenece a su proceso padre. Por ejemplo, una JVM se ejecuta en un solo proceso en el host O / S. Los subprocesos en la JVM comparten el montón que pertenece a ese proceso; Es por eso que varios hilos pueden acceder al mismo objeto. Por lo general, aunque comparten un montón común, los subprocesos tienen su propio espacio de pila. Así es como la invocación de un hilo de un método se mantiene separada de la de otro. Todo esto es una simplificación excesiva, pero es lo suficientemente precisa en un nivel alto. Muchos detalles difieren entre los sistemas operativos. Proceso frente a subproceso Un programa frente a un programa secuencial, una ejecución por sí mismo frente a No puede ejecutarse por sí mismo Unidad de asignación frente a Unidad de ejecución Tiene su propio espacio de memoria frente a Compartir con otros Cada proceso tiene uno o más subprocesos vs. Cada hilo pertenece a un proceso Caro, necesita cambiar de contexto vs. Barato, puede usar memoria de proceso y puede no necesitar cambiar de contexto Más seguro. Un proceso no puede corromper otro proceso vs. Menos seguro. Un hilo puede escribir la memoria utilizada por otro hilo

Para cualquiera que haya trabajado en una gran empresa, esta analogía podría ser cercana a su hogar. Los subprocesos son como diferentes habitaciones en un edificio (diferentes subprocesos en un proceso) y diferentes edificios para una compañía (diferentes procesos para una compañía). Es mucho más fácil para las diferentes personas en un edificio trabajar juntas, ya que tienen fácil acceso entre ellas y los recursos de los edificios.

Un proceso tiene su propio espacio de memoria virtual privado y su propia tabla de controladores (por lo que controla los archivos y otros objetos del núcleo). Por lo tanto, lo que haga en ese espacio de direcciones no afecta a otros procesos, por lo que, por ejemplo, escribir a la dirección Ox07000000 no tiene ningún efecto en esa dirección en otro proceso.

Los hilos, por otro lado, comparten el espacio de memoria virtual en un solo proceso, por lo que 0x07000000 actualizado por el hilo A afecta a los B en el mismo proceso. Puede ver claramente que esto puede ser ventajoso para compartir datos y manejos fácilmente, etc. pero también hace que sea fácil cometer errores. Hace una diferencia con respecto a un límite de seguridad, por ejemplo, si realmente desea aislar realmente el código, un proceso diferente es mejor que un subproceso diferente. Para recuperar la analogía, diferentes departamentos tienen diferentes edificios en una universidad.

Solía ​​ser que los procesos eran significativamente más pesados ​​de crear que los subprocesos, pero eso ha disminuido con las nuevas arquitecturas del sistema operativo.

U puede haber escuchado que el proceso es pesado. en realidad, cuando se crea el proceso, Os crea un PCB (bloque de control de proceso) que incluye muchas cosas como identificación del proceso, registros de estado, contador, lista de recursos, lista de archivos abiertos, información de administración de memoria y todo. Esta información es necesaria para la programación de procesos por parte de Os (para que cada proceso obtenga el tiempo adecuado en la CPU). Además, compartir recursos entre procesos requiere una gran cantidad de sobrecarga (debido a la seguridad proporcionada por Os), mientras que los subprocesos son parte del proceso que se ejecuta de manera independiente sin mucha sobrecarga. Cada proceso tiene un subproceso mientras que cada proceso puede crear múltiples subprocesos para la ejecución. La comunicación entre subprocesos es cada uno (es responsabilidad del programador ver la seguridad). En el procesador multinúcleo, cada subproceso puede ejecutarse simultáneamente en cada núcleo del procesador

  • Cada proceso se inicia con un hilo primario, pero puede crear hilos adicionales cuando sea necesario
  • El proceso se ejecuta en un espacio de direcciones separado, pero los subprocesos de un proceso comparten espacio de direcciones
  • Los hilos tienen acceso directo al segmento de datos de su proceso; El proceso tiene su propia copia del segmento de datos del proceso padre. consulte el punto 2.
  • Los hilos pueden comunicarse directamente con otros hilos de ese proceso; los procesos deben usar la comunicación entre procesos para comunicarse con los procesos hermanos, se deduce directamente del punto 2.
  • Los hilos llevan menos información de estado que el proceso; por lo tanto incurren en gastos generales más bajos en comparación con los procesos.
  • Los nuevos hilos se crean fácilmente; El nuevo proceso requiere la duplicación del proceso padre, y la asignación de memoria y recursos es costosa.
  • Los cambios en el hilo principal [cancelación, cambio de prioridad] pueden afectar el comportamiento de otros hilos de ese proceso; los cambios en el proceso primario no afectan los procesos secundarios o pares
  • El cambio de contexto entre subprocesos en el mismo proceso suele ser más rápido que el cambio de contexto entre procesos.
  • En ciertos sistemas operativos, un subproceso también se conoce como un proceso liviano (lwp), Solaris es uno de esos sistemas operativos.

1) Tanto el proceso como el subproceso son rutas de ejecución independientes, pero un proceso puede tener múltiples subprocesos.

2) Cada proceso tiene su propio espacio de memoria, código ejecutable y un identificador de proceso (PID) único, mientras que cada subproceso tiene su propia pila en Java, pero utiliza la memoria principal del proceso y la comparte con otros subprocesos.

3) Los subprocesos también se denominan tarea o proceso ligero (LWP) en el sistema operativo

4) Los subprocesos del mismo proceso pueden comunicarse entre sí mediante la construcción del lenguaje de programación como esperar y notificar en Java y mucho más simple que la comunicación entre procesos.

5) Otra diferencia entre Process y Thread en Java es que es cómo se crean Thread y process. Es fácil crear un subproceso en comparación con el proceso que requiere la duplicación del proceso principal.

6) Todos los subprocesos que forman parte del mismo proceso comparten recursos del sistema, como descriptores de archivos, memoria de almacenamiento dinámico y otros recursos, pero cada subproceso tiene su propio controlador de excepciones y su propia pila en Java.

Hubo algunas de las diferencias fundamentales entre Process y Thread en Java. Siempre que hable sobre Proceso vs Hilo, solo tenga en cuenta que un proceso puede generar múltiples Hilos y compartir la misma memoria en Java. Cada hilo tiene su propia pila.

Proceso
Un proceso tiene un entorno de ejecución autónomo. Una instancia de programa llamada Proceso.

  • Cada proceso tiene su propio espacio de direcciones.
  • El proceso tiene que usar un recurso de comunicación entre procesos (IPC) como tuberías y enchufes para comunicarse con otro proceso.
  • Los nuevos procesos requieren la duplicación del proceso padre.
  • Los procesos tienen una sobrecarga considerable.
  • El proceso tiene su propia copia del segmento de datos del proceso padre.
  • El proceso tiene control sobre sus procesos hijos.
  • Cualquier cambio en el proceso primario no afecta los procesos secundarios.
  • El proceso es controlado por el sistema operativo.
  • Los procesos son independientes.

Hilo
Los hilos a veces se denominan procesos ligeros. Se ejecuta dentro del proceso.

  • Los subprocesos comparten el espacio de direcciones del proceso que lo creó.
  • Los hilos pueden comunicarse directamente con otros hilos de su proceso.
  • Se pueden crear nuevos hilos fácilmente.
  • Los hilos casi no tienen sobrecarga.
  • Los hilos tienen acceso directo al segmento de datos de su Proceso.
  • Los hilos tienen un control considerable sobre los hilos del mismo proceso.
  • Cualquier cambio en el hilo principal (cancelación, cambio de prioridad, etc.) puede afectar el comportamiento de los otros hilos del proceso.
  • Los hilos son controlados por el programador en un programa.
  • Los hilos son dependientes.

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

Descargo de responsabilidad: JavaQuery es mi blog personal.

Un proceso es un entorno de ejecución completo con su propia memoria. Solo puede comunicarse con otros procesos a través de canales de bajo nivel proporcionados por el sistema operativo. Las aplicaciones y muchas operaciones del sistema generalmente se implementan como procesos.

Un hilo es una unidad de ejecución dentro de un proceso. Comparte acceso a la memoria con todos los otros subprocesos en el mismo proceso, y puede usar cualquier cantidad de formas de comunicarse con otros subprocesos. Como tal, es un método mucho más liviano para ejecutar código en paralelo (o al menos concurrentemente) con otro código. En la mayoría de los sistemas modernos, los hilos se asignan a unidades de ejecución física dentro de la CPU del sistema.

Conceptualmente, existe una superposición considerable entre ellos, ya que ambas son formas de compartir un recurso limitado (tiempo de CPU) de una manera que está oculta del código en sí. Pero un proceso es considerablemente ‘más pesado’ que un hilo y representa un nivel mucho mayor de demarcación entre diferentes actividades de la computadora.

Gracias por el A2A. En Java, Thread y Process son dos términos estrechamente relacionados en subprocesos múltiples y la principal diferencia entre Thread y Process en Java es que los Threads son parte del proceso. es decir, un proceso puede generar múltiples hilos. Si ejecuta un programa Java en un sistema basado en UNIX, por ejemplo, Linux y si ese programa crea 10 subprocesos, sigue siendo un proceso.

Otra diferencia importante entre Process y Thread es que, un proceso tiene su propio espacio de direcciones. Un hilo utiliza el espacio de direcciones del proceso y lo comparte con los otros hilos de ese proceso.

Un hilo puede comunicarse con otro hilo (del mismo proceso) directamente mediante el uso de métodos como wait (), notify (), notifyAll (). Un proceso puede comunicarse con otro proceso mediante la comunicación entre procesos.

Gracias,

Manera de aprender fácilmente

La diferencia típica es que los subprocesos dentro del mismo proceso se ejecutan en un espacio de memoria compartida, mientras que los procesos se ejecutan en espacios de memoria separados.
Los subprocesos no son independientes entre sí como procesos, como resultado, los subprocesos comparten con otros subprocesos su sección de código, sección de datos y recursos del sistema operativo como archivos abiertos y señales. Pero, al igual que el proceso, un hilo tiene su propio contador de programa (PC), un conjunto de registros y un espacio de pila.

Piensa en ello de esta manera:

Su programa / proceso es un negocio. Para que la empresa funcione, necesita al menos una persona que trabaje allí, eso es un hilo. Si desea que su empresa haga más cosas al mismo tiempo, agregue más personas / hilos, que pueden usar cualquier cosa que posea la empresa (memoria).

Puede iniciar otro negocio / proceso, pero los trabajadores / hilos solo pueden funcionar dentro de ese negocio / proceso, no el primero.

Por lo tanto, los subprocesos que se ejecutan con el mismo programa pueden acceder a la memoria del otro, pero no hay memoria fuera de ese programa.

Un proceso es básicamente el primer hilo que hace su programa. A menudo tendrá propiedades especiales para que el sistema operativo también pueda interrogarlo. A veces también hay preocupaciones prácticas, como que el primer hilo es el único que puede manipular la GUI, ya que es el que maneja eventos como los clics en los botones.

Tanto los procesos como los subprocesos son entidades de tiempo de ejecución en el sistema operativo que se ejecutan en paralelo.

El proceso utiliza 3 tipos de segmentos de memoria: estático (también conocido como datos globales), dinámico (también conocido como montón) y una o más pilas de llamadas. Un hilo utiliza una pila de llamadas (un flujo de control separado). Hay uno o más hilos paralelos por proceso.

Todos los hilos del proceso pueden acceder a los datos estáticos y dinámicos. Esto se llama acceso concurrente. Sin embargo, para evitar la corrupción de datos, es posible que (necesiten) serializar el acceso (es decir, asegurarse de que, como máximo, uno de ellos acceda a los datos a la vez; eso es esencial al modificar los datos, puede que no sea necesario para el paralelo busca). El acceso en sí es sencillo (a través de la dirección de datos).

Los procesos pueden, en sistemas operativos contemporáneos, también compartir (partes de) su memoria; es más complicado, sin embargo; comúnmente, una memoria de proceso está aislada y otros procesos no pueden leerla / escribirla.

Un proceso puede crear subprocesos. Esto crea una jerarquía de árbol de procesos. Si un proceso termina (es decir, se elimina por completo), el padre debe leer su código de salida. Hasta que eso se haga, el proceso todavía existe en el sistema operativo (aunque ya no “vive”, se llama zombie, entonces). La paternidad del proceso solo puede moverse hacia arriba, es decir, el padre puede pasar al niño solo a su padre, no a un proceso no relacionado u otro niño. Los hilos (dentro de un proceso) no necesariamente crean tal jerarquía; son técnicamente iguales.

También hay una diferencia en los costos de creación de un proceso (secundario) y un nuevo hilo, ya que un proceso contiene más recursos (datos estáticos y dinámicos, recursos IPC, etc.) que el sistema operativo debe asignarle.

Por último, pero no menos importante, un bloqueo de un hilo significa el bloqueo de todo el proceso. El bloqueo de un proceso (secundario) no afecta inmediatamente la funcionalidad de su padre.

Desde el punto de vista práctico, si necesita sus flujos de control en paralelo para compartir datos, los subprocesos suelen ser más eficientes. Si no lo hace, puede usar hilos o procesos. Sin embargo, los procesos también pueden comunicarse entre sí. Se llama comunicación entre procesos (IPC). Pueden enviarse señales entre sí, pueden usar colas de mensajes IPC o memoria compartida mencionada anteriormente y, por supuesto, pueden comunicarse a través de sockets (basados ​​en la red o en el sistema de archivos). En cuanto a la sincronización del acceso a los recursos compartidos, los procesos también pueden necesitar algunas primitivas como semáforos IPC, bloqueos de archivos, etc. Los principios son similares, pero se implementan en un nivel diferente.

Un “proceso” es todo su programa, mientras que un “hilo” es una tarea independiente dentro de su programa (suponiendo que su programa tenga varias cosas que hacer).

Más definitivamente: un hilo es un conjunto secuencial de instrucciones, un proceso es un contexto dentro del cual se ejecutan los hilos.

A Ken Thompson se le hizo una pregunta similar en Google Moderator. Su respuesta:

Para mí, el proceso es un concepto y el hilo es una implementación. Me gustaría ver que la implementación se acerque al concepto.

(Creo que quiere decir que le gustaría ver más programación concurrente realizada en el estilo de paso de mensajes en lugar del estilo de memoria compartida. Según Wikipedia, trabajó en el lenguaje Go, que admite el estilo de paso de mensajes, a través de canales ).

Los procesos y los subprocesos son secuencias independientes de ejecución, la diferencia típica es que los subprocesos se ejecutan en un espacio de memoria compartida, mientras que los procesos se ejecutan en espacios de memoria separados.
Un proceso tiene un entorno de ejecución autónomo que significa que tiene un conjunto privado completo de recursos básicos de tiempo de ejecución, en particular cada proceso tiene su propio espacio de memoria. Los hilos existen dentro de un proceso y cada proceso tiene al menos un hilo.

Más sobre …. Diferencia entre un hilo y un proceso

Dell