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.
- ¿Los enrutadores volverán obsoletos los conmutadores?
- ¿Qué sucederá si un servidor DNS raíz se cae durante 24 horas?
- ¿Cómo detecto el tráfico de red por proceso y por conexión en Linux?
- Cómo configurar un servidor DHCP falso en mi red
- Cómo reparar un enrutador Cisco que no funciona