He estado tratando de encontrar una buena definición y comprender qué es realmente un hilo .
Parece que me falta algo obvio, pero cada vez que leo sobre qué es un hilo, es casi una definición circular, como "un hilo es un hilo de ejecución" o "una forma de dividirse en tareas en ejecución". Uh uh ¿Eh?
Parece por lo que he leído que un hilo no es realmente algo concreto, como lo es un proceso. De hecho, es solo un concepto. Por lo que entiendo de la forma en que esto funciona, un procesador ejecuta algunos comandos para un programa (que se ha denominado un hilo de ejecución ), luego, cuando necesita cambiar un poco el procesamiento de otro programa, almacena el estado de el programa se está ejecutando actualmente en algún lugar (Thread Local Storage) y luego comienza a ejecutar las instrucciones del otro programa. Y de ida y vuelta. De tal manera, un hilo es realmente solo un concepto para "uno de los caminos de ejecución" de un programa que se está ejecutando actualmente.
A diferencia de un proceso, que realmente es algo: es un conglomerado de recursos, etc.
Como ejemplo de una definición que realmente no me ayudó mucho. . .
De Wikipedia :
"Un subproceso en ciencias de la computación es la abreviatura de un subproceso de ejecución. Los subprocesos son una forma para que un programa se divida (denomine" dividir ") en dos o más tareas de ejecución simultáneas (o seudo simultáneas). Los subprocesos y procesos difieren de uno "sistema operativo a otro pero, en general, un hilo está contenido dentro de un proceso y diferentes hilos en el mismo proceso comparten los mismos recursos, mientras que diferentes procesos en el mismo sistema operativo multitarea no".
¿Entonces tengo razón? ¿Incorrecto? ¿Qué es realmente un hilo?
Editar: Al parecer un hilo también se da su propia pila de llamadas, por lo que es un poco de un hormigón cosa .
fuente
Respuestas:
Un subproceso es un conjunto independiente de valores para los registros del procesador (para un solo núcleo). Como esto incluye el puntero de instrucción (también conocido como Contador de programa), controla lo que se ejecuta en qué orden. También incluye el Apilador de pila, que es mejor apuntar a un área de memoria única para cada hilo o de lo contrario interferirán entre sí.
Los subprocesos son la unidad de software afectada por el flujo de control (llamada de función, bucle, goto), porque esas instrucciones operan en el puntero de instrucción, y eso pertenece a un subproceso particular. Los subprocesos a menudo se programan de acuerdo con algún esquema de priorización (aunque es posible diseñar un sistema con un subproceso por núcleo de procesador, en cuyo caso cada subproceso siempre se está ejecutando y no se necesita una programación).
De hecho, el valor del puntero de instrucción y la instrucción almacenada en esa ubicación es suficiente para determinar un nuevo valor para el puntero de instrucción. Para la mayoría de las instrucciones, esto simplemente avanza la IP por el tamaño de la instrucción, pero las instrucciones de flujo de control cambian la IP de otras maneras predecibles. La secuencia de valores que toma la IP forma una ruta de ejecución que se entrelaza a través del código del programa, dando lugar al nombre de "hilo".
fuente
Un hilo es un contexto de ejecución, que es toda la información que una CPU necesita para ejecutar una secuencia de instrucciones.
Suponga que está leyendo un libro y desea tomarse un descanso ahora mismo, pero desea poder regresar y reanudar la lectura desde el punto exacto donde se detuvo. Una forma de lograrlo es anotando el número de página, el número de línea y el número de palabra. Entonces, el contexto de ejecución para leer un libro son estos 3 números.
Si tienes una compañera de cuarto y ella está usando la misma técnica, puede tomar el libro mientras tú no lo estás usando y reanudar la lectura desde donde se detuvo. Luego puede recuperarlo y reanudarlo desde donde estaba.
Los hilos funcionan de la misma manera. Una CPU te está dando la ilusión de que está haciendo múltiples cálculos al mismo tiempo. Lo hace al pasar un poco de tiempo en cada cálculo. Puede hacerlo porque tiene un contexto de ejecución para cada cálculo. Al igual que puedes compartir un libro con tu amigo, muchas tareas pueden compartir una CPU.
En un nivel más técnico, un contexto de ejecución (por lo tanto, un subproceso) consta de los valores de los registros de la CPU.
Último: los hilos son diferentes de los procesos. Un hilo es un contexto de ejecución, mientras que un proceso es un conjunto de recursos asociados con un cálculo. Un proceso puede tener uno o varios hilos.
Aclaración: los recursos asociados con un proceso incluyen páginas de memoria (todos los subprocesos en un proceso tienen la misma vista de la memoria), descriptores de archivos (por ejemplo, sockets abiertos) y credenciales de seguridad (por ejemplo, la ID del usuario que inició el proceso).
fuente
Para definir formalmente un hilo, primero debemos entender los límites de dónde opera un hilo.
Un programa de computadora se convierte en un proceso cuando se carga desde alguna tienda en la memoria de la computadora y comienza la ejecución. Un proceso puede ser ejecutado por un procesador o un conjunto de procesadores. Una descripción del proceso en la memoria contiene información vital, como el contador del programa que realiza un seguimiento de la posición actual en el programa (es decir, qué instrucción se está ejecutando actualmente), registros, almacenes de variables, identificadores de archivos, señales, etc.
Un hilo es una secuencia de tales instrucciones dentro de un programa que puede ejecutarse independientemente de otro código. La figura muestra el concepto:
Los subprocesos se encuentran dentro del mismo espacio de direcciones del proceso , por lo tanto, gran parte de la información presente en la descripción de la memoria del proceso se puede compartir entre subprocesos.
Parte de la información no se puede replicar, como la pila (puntero de pila a un área de memoria diferente por subproceso), registros y datos específicos del subproceso. Esta información es suficiente para permitir que los subprocesos se programen independientemente del subproceso principal del programa y posiblemente uno o más subprocesos dentro del programa.
Se requiere soporte explícito del sistema operativo para ejecutar programas multiproceso. Afortunadamente, la mayoría de los sistemas operativos modernos admiten subprocesos como Linux (a través de NPTL), variantes BSD, Mac OS X, Windows, Solaris, AIX, HP-UX, etc. Los sistemas operativos pueden usar diferentes mecanismos para implementar el soporte de subprocesos múltiples.
Aquí puede encontrar más información sobre el tema. Esa fue también mi fuente de información.
Permítanme agregar una oración proveniente de Introducción al sistema integrado de Edward Lee y Seshia :
fuente
Los procesos son como dos personas que usan dos computadoras diferentes, que usan la red para compartir datos cuando es necesario. Los hilos son como dos personas que usan la misma computadora, que no tienen que compartir datos explícitamente, sino que deben turnarse cuidadosamente.
Conceptualmente, los hilos son solo múltiples abejas obreras zumbando en el mismo espacio de direcciones. Cada subproceso tiene su propia pila, su propio contador de programa, etc., pero todos los subprocesos en un proceso comparten la misma memoria. Imagine que dos programas se ejecutan al mismo tiempo, pero ambos pueden acceder a los mismos objetos.
Contrasta esto con los procesos. Los procesos tienen cada uno su propio espacio de direcciones, lo que significa que un puntero en un proceso no se puede usar para referirse a un objeto en otro (a menos que use memoria compartida).
Supongo que las cosas clave para entender son:
fuente
Voy a utilizar una gran cantidad de texto del libro Conceptos de sistemas operativos de ABRAHAM SILBERSCHATZ, PETER BAER GALVIN y GREG GAGNE junto con mi propia comprensión de las cosas.
Proceso
Cualquier aplicación reside en la computadora en forma de texto (o código).
Cuando iniciamos una aplicación, creamos una instancia de ejecución. Esta instancia de ejecución se llama proceso. EDITAR: (Según mi interpretación, análoga a una clase y una instancia de una clase, la instancia de una clase es un proceso).
Un ejemplo de procesos es el de Google Chrome. Cuando iniciamos Google Chrome, se generan 3 procesos:
Hilo
Para responder esto, creo que primero debes saber qué es un procesador. Un procesador es la pieza de hardware que realmente realiza los cálculos. EDITAR: (Cálculos como agregar dos números, ordenar una matriz, básicamente ejecutar el código que se ha escrito)
Ahora pasando a la definición de un hilo.
EDITAR: Definición de un hilo del sitio web de Intel:
Entonces, si el proceso Renderer de la aplicación Chrome clasifica una serie de números, la clasificación se realizará en un hilo / hilo de ejecución. (La gramática con respecto a los hilos me parece confusa)
Mi interpretación de las cosas
Un proceso es una instancia de ejecución. Los subprocesos son los trabajadores reales que realizan los cálculos a través del acceso a la CPU. Cuando se ejecutan varios subprocesos para un proceso, el proceso proporciona memoria común.
EDITAR: Otra información que encontré útil para dar más contexto
Todas las computadoras modernas tienen más de un hilo. El número de hilos en una computadora depende del número de núcleos en una computadora.
Computación concurrente :
De Wikipedia:
Entonces, podría escribir un programa que calcule la suma de 4 números:
En el programa para calcular esta suma (que será un proceso que se ejecuta en un hilo de ejecución), puedo bifurcar otro proceso que puede ejecutarse en un hilo diferente para calcular (4 + 5) y devolver el resultado al proceso original, mientras que el El proceso original calcula la suma de (1 + 3).
fuente
Desafortunadamente, existen hilos. Un hilo es algo tangible. Puedes matar a uno, y los otros seguirán corriendo. Puede generar nuevos hilos ... aunque cada hilo no es su propio proceso, se ejecutan por separado dentro del proceso. En máquinas multinúcleo, 2 hilos podrían ejecutarse al mismo tiempo.
http://en.wikipedia.org/wiki/Sim simultánea_multithreading
http://www.intel.com/intelpress/samples/mcp_samplech01.pdf
fuente
Un hilo no es más que un contexto de memoria (o cómo Tanenbaum lo pone mejor, agrupación de recursos) con reglas de ejecución. Es una construcción de software. La CPU no tiene idea de qué es un hilo (algunas excepciones aquí, algunos procesadores tienen hilos de hardware), solo ejecuta instrucciones.
El núcleo presenta el concepto de hilo y proceso para administrar la memoria y el orden de las instrucciones de manera significativa.
fuente
Esto fue tomado de una respuesta de Yahoo:
Sin embargo, para poner en términos más simples, los hilos son como diferentes "tareas". Así que piense en cuándo está haciendo algo, por ejemplo, escribiendo una fórmula en un papel. Eso puede considerarse un hilo. Luego, otro hilo es que estás escribiendo algo más en otra hoja de papel. Ahí es donde entra la multitarea.
Se dice que los procesadores Intel tienen "hiperprocesamiento" (AMD también lo tiene) y está destinado a poder realizar múltiples "subprocesos" o realizar múltiples tareas mucho mejor.
No estoy seguro de la logística de cómo se maneja un hilo. Recuerdo haber escuchado sobre el procesador yendo y viniendo entre ellos, pero no estoy 100% seguro de esto y espero que alguien más pueda responder eso.
fuente
La respuesta varía enormemente entre diferentes sistemas y diferentes implementaciones, pero las partes más importantes son:
Más allá de eso: los subprocesos podrían implementarse dentro de un solo proceso mediante un tiempo de ejecución de lenguaje, los subprocesos podrían ser corutinas, los subprocesos podrían implementarse dentro de un solo proceso mediante una biblioteca de subprocesos o los subprocesos podrían ser una construcción del núcleo.
En varios sistemas modernos de Unix, incluido Linux con el que estoy más familiarizado, todo son hilos: un proceso es simplemente un tipo de hilo que comparte relativamente pocas cosas con su padre (es decir, obtiene sus propias asignaciones de memoria, su propia tabla de archivos). y permisos, etc.) La lectura
man 2 clone
, especialmente la lista de banderas, es realmente instructiva aquí.fuente
No estoy muy contento con ninguna de esas respuestas, así que voy a agregar la mía aquí :) Un hilo es una abstracción del núcleo para programar el trabajo en el procesador, un hilo es lo que el núcleo le da para administrar el tiempo del procesador y compartir trabajo con otros
fuente
Permítanme explicar primero la diferencia entre proceso e hilos.
Un proceso puede tener {1..N} número de hilos. Una pequeña explicación sobre memoria virtual y procesador virtual.
Memoria virtual
Se utiliza como espacio de intercambio para que un proceso piense que está en la memoria primaria para la ejecución.
Procesador virtual
El mismo concepto que la memoria virtual, excepto que es para el procesador. Para un proceso, parecerá que es lo único que está usando el procesador.
El sistema operativo se encargará de asignar la memoria virtual y el procesador virtual a un proceso y realizar el intercambio entre procesos y la ejecución.
Todos los hilos dentro de un proceso compartirán la misma memoria virtual. Sin embargo, cada subproceso tendrá asignado su procesador virtual individual para que puedan ejecutarse individualmente.
Por lo tanto, guarda la memoria y utiliza la CPU a su máximo potencial.
fuente