La principal ventaja de los hilos es el rendimiento.
Normalmente el rendimiento es una cantidad percibida y no dada.
Unas aplicaciones se beneficiarán de los hilos mientras
que otras no. Como se suele decir "el número de kilómetros
puede variar".
Existen un gran número de ventajas para emplear
los hilos de usuario así como los hilos del núcleo :
- Ejecución paralela :
Los hilos de nivel kernel se pueden ejecutar realmente en paralelo
en máquinas SMP (Symmetric Multiprocessors). Además
el mismo código binario es válido tanto para una
máquina de un procesador como una máquina multiprocesador.
- Ejecución de código asíncrono :
Ya que existen múltiples hilos de ejecución en un
programa construido con hilos, es posible que otro hilo del mismo
proceso sea planificado para ejecutar en el caso de que el hilo
de ejecución actual se bloquee. Esto incrementa la probabilidad
de que la aplicación asociada se ejecute mucho más
rápido. Normalmente existen algunas cosas a tener en cuenta :
- En el modelo de hilos de usuario, algunos bloqueos
bloquearán todo el proceso y se planificará un proceso
diferente.
- En el modelo de hilos de núcleo, es posible
que un hilo de otro proceso sea planificado cuando sucede un bloqueo
del hilo actual.
- En ambos modelos, un hilo puede bloquearse y
pueden no existir otros hilos listos para ejecutarse en el proceso,
por cualquier tipo de razones.
Así pues, el incremento del rendimiento no
siempre está garantizado, aunque al menos, el uso de los
hilos puede incrementar la probabilidad de un mejor rendimiento.
- Recursos compartidos :
Los hilos comparten la mayoría de los recursos en un proceso.
Comparten el acceso a los ficheros, memoria compartida, y el espacio
de direcciones virtual. El empleo de los hilos permite a los programadores
conservar los recursos del sistema. El rendimiento puede beneficiarse
también porque los recursos compartidos entre hilos necesitan
menos gestión que los recursos compartidos entre procesos.
- Velocidad de las operaciones con hilos :
Los hilos tienen un menor contexto que los procesos, así
pues, las operaciones con hilos son generalmente más rápidas
que las operaciones similares con procesos. En especial, la creación,
finalización y cambio de contexto de un hilo, son operaciones
más rápidas con los hilos que con los procesos.
Como ejemplo, en los procesadores de propósito general
(SPARC, MIPS, ALPHA, HP-PA, x86) el cambio de contexto entre hilos
de un mismo proceso lleva del orden de 50us. mientras que el cambio
de contexto entre hilos de distintos procesos lleva del orden
de 100us. Estos tiempos son muy inferiores al tiempo de cambio
de contexto completo entre procesos. Así en Solaris la
creación de un proceso es unas 30 veces más lento
que la creación de un hilo, las variables de sincronización
son unas 10 veces más lentas y el cambio de contexto unas
5 veces más lento.
- Tiempo de respuesta :
Si es posible separar operaciones en un programa, los hilos se
pueden emplear para mejorar los tiempos de respuesta de la aplicación.
Por ejemplo, supongamos que estamos usando una utilidad de correo
electrónico. En una versión de un solo hilo, mientras
almacenamos un mensaje podemos apreciar algún retraso antes
de que la interfaz de usuario sea refrescada. Esto es porque el
programa está primero haciendo una operación de
E/S para almacenar el mensaje y después refresca la pantalla.
Estas operaciones las realiza de forma secuencial. Normalmente,
si esta aplicación fuese una versión programada
con varios hilos, un hilo podría gestionar la E/S mientras
otro hilo gestiona la interfaz de usuario. Estas operaciones pueden
funcionar en paralelo, con la consiguiente ganancia en el tiempo
de respuesta.
- Programación natural :
Esta ventaja no está relacionada con el rendimiento, pero
es importante. En algunas aplicaciones, el diseñador puede
necesitar instrucciones del tipo 'goto' y otros métodos
para superar las limitaciones de la programación secuencial
tradicional. Sin embargo, con los hilos, el programador no está
limitado a emplear un modelo de ejecución secuencial. Así,
las limitaciones de la programación secuencial pueden solucionarse
de forma más intuitiva, menos compleja y más natural,
incluso empleando otros modelos de programación, como la
programación concurrente. Además muchos problemas
son más fáciles de plantear y programar con un modelo
de hilos debido a su estructura concurrente.
- Existe un estándar (POSIX 1003.1c)
lo que permite hacer a las aplicaciones portables entre distintas
plataformas. El mismo código fuente es válido para
distintas plataformas.
- Objetos distribuidos :
Con la aparición del estándar de objetos distribuidos
CORBA, los hilos toman un papel especial e importante. Los objetos
distribuidos tienen una estructura multihilo inherentemente. Cada
vez que se pide que un objeto realice una acción, el objeto
ejecuta la acción mediante un hilo independiente, de forma
que el objeto puede haber más de un hilo al mismo tiempo.
Además los servidores de objetos se pueden construir con
hilos de forma más efectiva y con un mayor rendimiento.