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

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

Tengo la sensación de que una palabra como 'proceso' está sobreutilizada y que también hay hilos de hardware y de software. ¿Qué hay de los procesos ligeros en lenguajes como Erlang? ¿Hay alguna razón definitiva para utilizar un término sobre el otro?

Solución

Tanto los procesos como los hilos son secuencias de ejecución independientes. La diferencia típica es que los hilos (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 a qué hilos "hardware" vs. "software" te refieres. Los hilos son una característica del entorno operativo, más que una característica de la CPU (aunque la CPU suele tener operaciones que hacen que los hilos sean eficientes).

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

Comentarios (10)

Una aplicación está formada por uno o varios procesos. Un proceso, en los términos más simples, es un programa en ejecución. Uno o más hilos se ejecutan en el contexto del proceso. Un hilo es la unidad básica a la que el sistema operativo asigna el tiempo del procesador. Un hilo puede ejecutar cualquier parte del código del proceso, incluyendo las partes que están siendo ejecutadas 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í.

Comentarios (2)

Tanto los hilos como los procesos son unidades atómicas de asignación de recursos del SO (es decir, hay un modelo de concurrencia que describe cómo se divide el tiempo de CPU entre ellos, y el modelo de propiedad de otros recursos del SO). Hay una diferencia en:

  • Recursos compartidos (los hilos comparten la memoria por definición, no son dueños de nada excepto de la pila y las variables locales; los procesos también podrían compartir la memoria, pero hay un mecanismo separado para eso, mantenido por el SO)
  • Espacio de asignación (espacio del núcleo para los procesos frente al espacio del usuario para los hilos)

Greg Hewgill arriba tenía razón sobre el significado de Erlang de la palabra "proceso", y aquí hay una discusión de por qué Erlang podría hacer procesos ligeros.

Comentarios (0)