Multihilo
# Multihilo

La técnica conocida como multihilo (del inglés: multithreading) permite a las unidades centrales de procesamiento (CPU) aumentar el rendimiento del núcleo de un procesador sin necesidad de alterar la frecuencia. El procesador, con base en esta técnica, puede procesar varias tareas de forma simultánea. Cada hilo, desde un punto de vista técnico, es una hebra que está conectada a un proceso y éstos constituyen, a su vez, un programa individual. El objetivo principal de esta técnica es optimizar la CPU, reduciendo los tiempos de espera entre procesos.

El paradigma de multihilo ha llegado a ser más popular a medida que los esfuerzos para llevar más adelante el paralelismo a nivel de instrucción se han atascado desde finales de los años 1990. Esto permitió que reemergiera a una posición destacada el concepto de computación de rendimiento a partir del más especializado campo del procesamiento transaccional:

* Aunque es muy difícil acelerar un solo hilo o un solo programa, la mayoría de los sistemas de computadores son realmente multitarea entre múltiples hilos o programas.
* Las técnicas que permitirían acelerar el rendimiento total del procesamiento del sistema en todas las tareas (tasks) darían como resultado un aumento significativo del rendimiento.

Las dos principales técnicas para computación de rendimiento son el multiproceso y el multihilo.

Una cierta crítica del multihilo incluye:

* Los múltiples hilos pueden interferir uno con el otro al compartir recursos de hardware como cachés o Translation Lookaside Buffer (TLB).
* Los tiempos de ejecución de un solo hilo no son mejorados, sino por el contrario, pueden ser degradados.
* El soporte de hardware para multihilo es más visible al software que el multiprocesamiento, por lo tanto requiriendo más cambios tanto a las aplicaciones como el sistema operativo.

Las técnicas de hardware usadas para soportar multihilo a menudo paralelizan las técnicas de software usadas para la multitarea de los programas de computadora.

## Lenguajes de programación que soportan multihilo

* C=
* Cilk
* Cilk Plus
* Cind
* C#
* Clojure
* Concurrent Pascal
* Emerald
* Fork – programming language for the PRAM model.
* Go
* Java
* ParaSail
* Rust
* SequenceL
