Todo depende de qué tan bien pueda dividir su problema en partes individuales que no necesitan comunicarse. El procesamiento de imágenes es un buen ejemplo en el que, en muchos casos, simplemente puede dividir la imagen en partes y procesarlas individualmente en paralelo y luego juntar las partes al final.
La parte importante es que funciona bien porque una vez que ha dividido la imagen en partes, ninguna de esas partes necesita información de ninguna de las otras mientras se lleva a cabo el procesamiento. En tal escenario, simplemente puede colocar cada pieza en un procesador separado.
Cuando tiene problemas es cuando necesita intercambiar información para continuar ejecutándose. Entonces, el proceso que necesita información solo tendrá que esperar hasta que esa información esté disponible. En tal escenario, es mejor que vaya con un solo subproceso.
- ¿Cuáles son las mejores rutinas que podemos adoptar para ser buenos en la programación / diseño de algoritmos?
- ¿Cuáles son las situaciones en las que uno puede usar ArrayList y otras situaciones para usar solo LinkedList?
- ¿Son los métodos en algoritmos Java?
- ¿Cuál es la diferencia entre la mochila y los problemas de Cutting the Rod usando programación dinámica?
- Cómo entender un algoritmo de búsqueda CSP
Pero hay otra razón para evitar el paralelismo; hace que su programa sea más difícil de entender y razonar. Especialmente si se trata de un recurso compartido en el que debe asegurarse de que varios subprocesos no pisen los dedos del otro (consulte el problema de lectores y escritores). Es por eso que los lenguajes de programación como Erlang, que se especializa en programación paralela, tienen una política de “no compartir nada” (ver Erlang – Programación concurrente)
Pero la conclusión es que si no tiene un problema que se divide fácilmente en fragmentos que no necesitan comunicarse, entonces el paralelismo no producirá tantos beneficios.