¿Cómo podemos usar el hilo para mejorar el rendimiento de los programas?

Eso depende en gran medida del programa al que te refieras. Esencialmente hay dos clases de paralelismo: datos y canalización. Subprocesar para aprovechar el paralelismo de datos es en gran medida el dominio de las bibliotecas de subprocesos como OpenMP, donde las operaciones independientes dentro de los bucles están paralelas a través de múltiples subprocesos. El paralelismo de la tubería también se basa en la independencia de los datos que se operan, sin embargo, no se puede exponer fácilmente a través de bucles. Como un ejemplo simple, tome un programa que sume cada número entero en dos archivos grandes. Esto podría hacerse secuencialmente, pero puede ser paralelo a tres hilos distintos: lectura, suma, escritura. Tan pronto como los datos estén disponibles para sumar, pueden comenzar a sumar. Lo mismo vale para la escritura. Cada una de estas operaciones puede existir felizmente al mismo tiempo.

También debería agregar, que ingenuamente agregar hilos a un programa a menudo puede ralentizar el programa. Lanzarlos implica una sobrecarga distinta de cero. También puede inducir el intercambio falso entre los núcleos del procesador, lo que también puede aumentar significativamente el tiempo de ejecución. Por último, el enhebrado introduce mucho comportamiento no determinista que generalmente debe ser administrado por el usuario. En Java es bastante fácil de dominar. Más cerca del hardware (C / C ++) se vuelve más un arte, hay toneladas de opciones; cada uno con su propio caso de uso.

Un ejemplo común cuando se usa hilo es cuando se realiza una llamada de red. Por ejemplo, tiene una aplicación que tiene un botón que, cuando se hace clic, descarga algunas actualizaciones del servidor en fragmentos. Ahora, si no crea un hilo separado para manejar esta solicitud de red, puede imaginar que la IU de su programa se congelará mientras continúe esta operación de red. Esto sucedería porque su programa entrará en el ciclo que lee los datos enviados por el servidor fragmento por fragmento.
En general, cada vez que tiene partes en su programa que son potencialmente independientes, puede acelerar el rendimiento ejecutándolas en paralelo usando hilos. Si no son completamente independientes, aún puede usar hilos con algunas técnicas de sincronización y aún así obtener un aumento de rendimiento decente. Por ejemplo, el navegador web que está utilizando en este momento tiene varios hilos ejecutándose en paralelo.

Quítelos de las aplicaciones y compílelos en el sistema operativo. Se ha demostrado que el bucle de eventos es mucho más eficiente a escala y el enhebrado en una arquitectura de hardware puede tener una implementación completamente diferente en una arquitectura de hardware diferente. Principalmente, el nivel de procesamiento paralelo.