Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Materia
Sistemas Operativos
Maestro
Tema
Nombre
Matricula
2024-0314
Fecha
7/2/2024
Índice
1.0 Introducción
1.1 Importancia de la multitarea en el desarrollo de aplicaciones
1.2 Conceptos Básicos
1.3 Diferencias entre hilos y procesos
1.4 Ventajas y Desventajas de Hilos y Procesos
5.0 Ejemplos de aplicaciones donde los hilos son más adecuados, donde los
procesos son más adecuados, y casos mixtos donde se combinan hilos y procesos.
1.0 Introducción
Hilos
En Sistema operativo un hilo o hebra (del inglés thread), proceso
ligero o subproceso es una secuencia de tareas encadenadas muy pequeña que puede ser
ejecutada por un sistema operativo.
La destrucción de los hilos antiguos por los nuevos es una característica que no permite
a una aplicación realizar varias tareas a la vez (concurrentemente). Los distintos hilos de
ejecución comparten una serie de recursos tales como el espacio de memoria, los
archivos abiertos, la situación de autenticación, etc. Esta técnica permite simplificar el
diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.
Un hilo es simplemente una tarea que puede ser ejecutada al mismo tiempo que otra
tarea.
Procesos
Un proceso, en informática, puede entenderse informalmente como un programa en
ejecución. Formalmente un proceso es "Una unidad de actividad que se caracteriza por
la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de
recursos del sistema asociados".
Los hilos se distinguen de los tradicionales procesos en que los procesos son –
generalmente– independientes, llevan bastante información de estados, e interactúan
solo a través de mecanismos de comunicación dados por el sistema. Por otra parte,
muchos hilos generalmente comparten otros recursos de forma directa. En muchos de
los sistemas operativos que dan facilidades a los hilos, es más rápido cambiar de un hilo
a otro dentro del mismo proceso, que cambiar de un proceso a otro. Este fenómeno se
debe a que los hilos comparten datos y espacios de direcciones, mientras que los
procesos, al ser independientes, no lo hacen. Al cambiar de un proceso a otro el sistema
operativo (mediante el dispatcher) genera lo que se conoce como overhead, que es
tiempo desperdiciado por el procesador para realizar un cambio de contexto (context
switch), en este caso pasar del estado de ejecución (running) al estado de espera
(waiting) y colocar el nuevo proceso en ejecución. En los hilos, como pertenecen a un
mismo proceso, al realizar un cambio de hilo el tiempo perdido es casi inapreciable.
Hilos (ventajas):
- Ligereza: Los hilos comparten el mismo espacio de memoria, lo que los hace más
eficientes en términos de consumo de recursos en comparación con los procesos.
- Comunicación eficiente: Los hilos pueden comunicarse entre sí de manera más rápida
y directa, ya que comparten la misma memoria.
- Mayor concurrencia: Dado que los hilos comparten recursos, pueden lograr una mayor
concurrencia y paralelismo en comparación con los procesos.
Desventajas:
- Falta de aislamiento: Si un hilo falla, puede afectar a otros hilos en el mismo proceso,
lo que puede llevar a problemas de estabilidad.
- Mayor complejidad de programación: La sincronización de datos y la gestión de la
concurrencia pueden ser más complejas en entornos de hilos debido a posibles
problemas como las condiciones de carrera y los bloqueos.
- Menor seguridad: Debido a la falta de aislamiento entre hilos, es más difícil garantizar
la seguridad y proteger los datos compartidos.
Procesos (ventajas):
- Aislamiento: Cada proceso tiene su propio espacio de memoria, lo que proporciona un
mayor grado de aislamiento y seguridad. Los fallos en un proceso generalmente no
afectan a otros procesos.
- Mayor estabilidad: Dado el aislamiento entre procesos, son más estables y menos
propensos a problemas de concurrencia y sincronización.
Desventajas:
- Mayor consumo de recursos: Debido a que cada proceso tiene su propio espacio de
memoria, los procesos suelen consumir más recursos del sistema en comparación con
los hilos.
- Comunicación más lenta: La comunicación entre procesos suele ser más lenta y menos
eficiente que entre hilos, ya que requiere mecanismos de comunicación interprocesos
como tuberías o sockets.
Hilos
- Eficiencia de recursos: Los hilos son generalmente más eficientes en términos de uso
de recursos, ya que comparten el mismo espacio de memoria y otros recursos del
sistema, como los descriptores de archivo. Esto puede llevar a una menor sobrecarga en
comparación con los procesos, lo que puede resultar en un rendimiento más rápido para
aplicaciones que requieren una alta concurrencia.
- Comunicación rápida: Debido a que los hilos comparten la misma memoria, la
comunicación entre ellos puede ser más rápida y eficiente. Esto es beneficioso para
tareas que requieren una cooperación estrecha entre diferentes partes de una aplicación.
- Escalabilidad: Los hilos pueden escalar bien en sistemas con múltiples núcleos de
procesador, ya que los hilos pueden ejecutarse en paralelo en diferentes núcleos. Esto
puede llevar a un mejor rendimiento en aplicaciones que pueden aprovechar la
paralelización de tareas.
Procesos
- Aislamiento y estabilidad: Los procesos ofrecen un mayor grado de aislamiento entre
sí, lo que puede mejorar la estabilidad y la seguridad de la aplicación. Los fallos en un
proceso generalmente no afectan a otros procesos, lo que puede ser crucial en
aplicaciones críticas.
- Gestión de recursos: Debido a que cada proceso tiene su propio espacio de memoria,
los procesos pueden ser menos eficientes en términos de uso de recursos en
comparación con los hilos. La creación y destrucción de procesos también puede tener
una mayor sobrecarga en comparación con la creación y destrucción de hilos.
Los hilos y los procesos manejan los recursos del sistema de manera diferente debido a
sus distintas características y estructuras de ejecución. Aquí te explico cómo se manejan
los recursos en cada caso:
Hilos
- Espacio de memoria compartido: Los hilos de un mismo proceso comparten el mismo
espacio de memoria. Esto significa que los hilos pueden acceder directamente a las
variables y estructuras de datos definidas en el proceso padre, lo que facilita la
comunicación y el intercambio de datos entre los hilos.
- Recursos compartidos: Además de la memoria, los hilos comparten otros recursos del
sistema, como los descriptores de archivos y las variables de entorno. Esto significa que
los recursos abiertos por un hilo están disponibles para todos los demás hilos del mismo
proceso.
Procesos
- Espacios de memoria separados: Cada proceso tiene su propio espacio de memoria
virtual, que está completamente aislado de los demás procesos. Esto significa que cada
proceso tiene su propia copia de las variables y estructuras de datos, lo que garantiza el
aislamiento entre procesos.
En resumen, los hilos permiten una comunicación más directa y un intercambio más
eficiente de recursos, pero requieren una gestión cuidadosa de la concurrencia para
evitar problemas de sincronización. Los procesos, por otro lado, ofrecen un mayor
grado de aislamiento y seguridad, pero pueden ser menos eficientes en términos de
comunicación y compartir recursos debido a la necesidad de mecanismos de
intercomunicación adicionales.
Eficiencia de Hilos
- Uso de recursos: Los hilos son generalmente más eficientes en el uso de recursos
porque comparten el mismo espacio de memoria y otros recursos del sistema dentro de
un proceso.
- Comunicación y Sincronización: La comunicación entre hilos es rápida y directa, ya
que comparten el mismo espacio de memoria. Sin embargo, la sincronización entre hilos
puede introducir sobrecarga debido a la necesidad de utilizar mecanismos de
sincronización como mutexes o semáforos para evitar condiciones de carrera y
garantizar la consistencia de los datos compartidos.
- Escalabilidad: Los hilos pueden escalar bien en sistemas con múltiples núcleos de
procesador, ya que los hilos pueden ejecutarse en paralelo en diferentes núcleos.
Eficiencia de Procesos
- Aislamiento de Seguridad: Los procesos proporcionan un alto grado de aislamiento y
seguridad, ya que cada proceso tiene su propio espacio de memoria y otros recursos del
sistema.
Hilos
- Complejidad de Programación: La programación con hilos puede ser más compleja
debido a la necesidad de sincronizar el acceso a datos compartidos entre hilos. Se deben
utilizar mecanismos como mutexes, semáforos o variables de condición para evitar
condiciones de carrera y garantizar la coherencia de los datos.
- Mantenimiento: El mantenimiento de aplicaciones con hilos puede ser desafiante
debido a la dificultad para identificar y solucionar problemas de concurrencia, como
bloqueos y condiciones de carrera. Se requiere un cuidado especial al diseñar y depurar
código para evitar errores sutiles y difíciles de reproducir.
Procesos
- Complejidad de Programación: La programación con procesos puede ser más simple
en comparación con hilos debido a la separación de espacios de memoria. Cada proceso
tiene su propio espacio de memoria y recursos, lo que reduce la necesidad de
sincronización entre procesos. Sin embargo, el diseño de la comunicación entre
procesos puede introducir complejidad adicional.
A pesar de que hoy en día casi todas las aplicaciones trabajan con múltiples hilos de
ejecución y que los programadores saben utilizarlos, muy poca gente sabe distinguir
entra Concurrencia y Paralelismo, ya que son conceptos bastantes relacionados, pero
que no necesariamente significan lo mismo.
Concurrencia
La concurrencia es la capacidad del CPU para procesar más de un proceso al mismo
tiempo, ¿simple no? Pero que implica esto realmente. Pues bien, para comprender esto
es necesario entender cómo funciona un procesador. Un procesador puede procesar al
mismo tiempo el mismo número de procesos que el número de CORES que tiene, de
esta forma, si un procesador tiene un CORE, entonces solo podrá ejecutar un proceso a
la vez, por otro parte, si tenemos 8 CORES, entonces podremos ejecutar hasta 8
procesos al mismo tiempo.
Ya con este punto claro, solo quedaría agregar que, en la concurrencia, los procesos en
ejecución no tienen por qué estar relacionados, es decir, cualquiera puede iniciar y
terminar en el momento que sea, y el resultado de uno no afecta al otro.
Paralelismo
El paralelismo sigue la filosofía de “divide y vencerás”, ya que consiste en tomar un
único problema, y mediante concurrencia llegar a una solución más rápido. El
paralelismo lo que hace es tomar el problema inicial, dividir el problema en fracciones
más pequeñas, y luego cada fracción es procesada de forma concurrente, aprovechando
al máximo la capacidad del procesador para resolver el problema. La principal
diferencia del paralelismo contra la concurrencia es que, en el paralelismo, todos los
procesos concurrentes están íntimamente relacionados a resolver el mismo problema, de
tal forma que el resultado de los demás procesos afecta al resultado final.
Nota: En el paralelismo debe de haber un paso final que se encargue de unir los
resultados de todos los procesos para poder arrojar un resultado final.
5.0 Ejemplos de aplicaciones donde los hilos son más adecuados, donde
los procesos son más adecuados, y casos mixtos donde se combinan
hilos y procesos.
- Juegos: Los juegos suelen requerir una alta concurrencia para manejar la lógica del
juego, la entrada del usuario, la física y los gráficos de forma simultánea. Cada uno de
estos aspectos puede ser manejado por hilos separados para una experiencia de juego
fluida.
Casos Mixtos:
- Servidores de aplicaciones: En los servidores de aplicaciones, puede haber una
combinación de hilos y procesos para manejar diferentes partes de la lógica de la
aplicación. Por ejemplo, puede haber un proceso principal que gestiona las conexiones
de red y la lógica de enrutamiento, mientras que los hilos se utilizan para manejar
solicitudes individuales de clientes.
https://es.wikipedia.org/wiki/Hilo_(inform%C3%A1tica)
https://es.wikipedia.org/wiki/Proceso_(inform%C3%A1tica)
https://www.oscarblancarteblog.com/2017/03/29/concurrencia-vs-paralelismo/