multithreading - thread - que son los hilos en programacion
Hilo y proceso (5)
¿Cuál es la mejor definición de un hilo y qué es un proceso? Si llamo a una función, ¿cómo sé que un hilo lo está llamando o un proceso (o no lo estoy entendiendo?). Esto es en un sistema multi-core (quadcore).
De http://wiki.answers.com/Q/What_is_the_difference_between_a_computer_process_and_thread :
Un solo proceso puede tener múltiples hilos que comparten datos globales y espacio de direcciones con otros hilos que se ejecutan en el mismo proceso, y por lo tanto pueden operar en el mismo conjunto de datos fácilmente. Los procesos no comparten espacio de direcciones y se debe usar un mecanismo diferente para compartir datos.
Si consideramos que ejecutar un programa de procesamiento de textos es un proceso, las funciones de guardado automático y revisión ortográfica que se producen en el fondo son hilos diferentes de ese proceso que operan en el mismo conjunto de datos (su documento).
Desde el punto de vista del usuario, la distinción principal es que los hilos comparten memoria entre sí, mientras que los procesos no. Eso significa que puede compartir fácilmente datos entre hilos, mientras que los procesos requieren algún tipo de llamada al sistema operativo para hacerlo.
Algunos lo llaman un beneficio de los hilos, pero compartir datos entre múltiples hilos de control está plagado de peligros, por lo que se puede argumentar que los procesos conducen a un código más confiable.
Hay mucho más, especialmente si eres una persona de OS.
En todos los sistemas operativos modernos que conozco, todo se ejecuta en un hilo, que se ejecuta en un proceso. El sistema operativo puede realizar un seguimiento de múltiples procesos, y cada proceso puede alojar una cantidad arbitraria de hilos. Entonces, todo el código se ejecuta dentro de un hilo y dentro de un proceso (ya que el hilo se ejecuta en un proceso).
La principal distinción entre los dos es que cada proceso tiene su propio espacio de direcciones virtuales. Los procesos separados no tienen acceso a los datos de los demás, manejadores de archivos o cualquier otra cosa, y esencialmente no son conscientes de que existen otros procesos.
Por otro lado, cada subproceso de un proceso comparte el mismo espacio de direcciones y, por lo tanto, todos los subprocesos pueden inspeccionar o modificar los datos de los demás, llamar a las mismas funciones y a todo lo demás.
A menudo (pero no siempre) los casos en que un programa consta de un proceso y un número de hilos.
Un proceso se compone de uno o más subprocesos (uno por defecto para la mayoría de los entornos). Un proceso puede crear hilos adicionales sin embargo.
Al igual que la respuesta anterior, cada Proceso tiene su propio espacio de memoria (cada uno puede tener un puntero a 0x12345, con esa ubicación de memoria con valores diferentes para cada proceso), mientras que todos los Subprocesos de un proceso apuntan a la misma ubicación de memoria , ya que todos están en el mismo espacio de memoria.
Cuando se llama a una función, casi siempre se llama al mismo hilo en el que se está ejecutando la llamada. En Objective-C, hay excepciones (performSelectorOnMainThread), y puede haber también para otros lenguajes, pero ese tipo de funcionalidad solo es necesaria en casos especiales.
Una cosa para agregar es cómo maneja esto un procesador multi-core. Piense en un hilo como la ejecución secuencial de su código.
Un núcleo en una CPU solo puede ejecutar un hilo a la vez. Entonces, si este hilo está bloqueado porque el programa está esperando que finalice una operación de E / S, el proceso está bloqueado (ejemplo muy simplificado: Word no responde). Multi-threading nos permite ejecutar múltiples rutas de código al mismo tiempo. "Mismo tiempo" es un poco mentira, ya que solo un hilo puede ejecutarse a la vez en un núcleo, pero la CPU le da un poco de tiempo a cada hilo, por lo que parece que todos estos hilos se están ejecutando en el Mismo tiempo. Un buen ejemplo aquí es el corrector ortográfico en Word.
Si tiene múltiples núcleos, la única diferencia es que en una CPU N-Core puede tener N subprocesos ejecutándose al mismo tiempo. Para simplificar mucho, no importa a qué proceso pertenecen los hilos. Para simplificar aún más, esperarías un aumento de rendimiento de N veces. :-RE