bueno, realmente depende de lo que estés desarrollando. la respuesta, dependiendo de lo que esté desarrollando, puede variar de "es insignificante" a "es absolutamente crítico, y esperamos que todos en el equipo tengan una buena comprensión y uso de implementaciones paralelas".
En la mayoría de los casos, un buen entendimiento y uso de bloqueos, subprocesos y tareas y grupos de tareas será un buen comienzo cuando se requiera paralelismo. (varía según lang / lib)
Agregue a eso las diferencias en los diseños que debe hacer: para el multiprocesamiento no trivial, a menudo uno debe aprender varios nuevos modelos de programación o estrategias de paralelización. en ese caso, el tiempo para aprender, fallar suficientes veces para tener una comprensión sólida y actualizar los programas existentes puede llevar un equipo por año (o más). una vez que haya llegado a ese punto, (¡con suerte!) no percibirá ni abordará los problemas / implementaciones como lo hace hoy (siempre que aún no haya hecho esa transición).
Otro obstáculo es que está optimizando efectivamente un programa para una determinada ejecución. Si no se le da mucho tiempo para optimizar los programas, realmente no se beneficiará tanto como debería. La paralelización de alto nivel (u obvia) puede mejorar la velocidad percibida de su programa con bastante poco esfuerzo, y eso es lo que muchos equipos llegarán hoy: "Hemos paralelizado las partes realmente obvias de la aplicación", eso está bien en algunos casos. ¿Será el beneficio de tomar la fruta baja y usar paralización simple ser proporcional al número de núcleos? a menudo, cuando hay dos o cuatro núcleos lógicos pero no tan a menudo más allá de eso. En muchos casos, es un rendimiento aceptable, dada la inversión de tiempo. Este modelo paralelo es la introducción de muchas personas para implementar buenos usos del paralelismo.
lo que aprenda usando estos modelos paralelos triviales no será ideal en todos los escenarios paralelos complejos; La aplicación efectiva de diseños paralelos complejos requiere una comprensión y un enfoque muy diferentes. Estos modelos simples a menudo están separados o tienen una interacción trivial con otros componentes del sistema. Además, muchas implementaciones de estos modelos triviales no se adaptan bien a sistemas paralelos complejos de manera efectiva: un diseño paralelo complejo malo puede tardar tanto tiempo en ejecutarse como el modelo simple. ill: se ejecuta dos veces más rápido que el modelo de subproceso único, mientras utiliza 8 núcleos lógicos durante la ejecución. Los ejemplos más comunes son usar / crear demasiados hilos y altos niveles de interferencia de sincronización. en general, esto se denomina desaceleración paralela. es bastante fácil de encontrar si aborda todos los problemas paralelos como problemas simples.
entonces, digamos que realmente debería utilizar el multihilo eficiente en sus programas (la minoría, en el clima de hoy): deberá emplear el modelo simple de manera efectiva para aprender el modelo complejo y luego volver a aprender cómo aborda el flujo y la interacción del programa. el modelo complejo es donde debería estar su programa en última instancia, ya que allí es donde está el hardware hoy y donde se realizarán las mejoras más dominantes.
La ejecución de modelos simples se puede imaginar como una bifurcación, y los modelos complejos funcionan como un ecosistema complejo. Creo que la comprensión de modelos simples, incluido el bloqueo general y el subprocesamiento, debería ser o se esperará de los desarrolladores intermedios cuando el dominio (en el que se desarrolla) lo use. comprender modelos complejos todavía es un poco inusual hoy (en la mayoría de los dominios), pero creo que la demanda aumentará bastante rápido. Como desarrolladores, muchos más de nuestros programas deberían admitir estos modelos, y la mayoría de los usos están bastante atrasados en la comprensión e implementación de estos conceptos. Dado que los recuentos de procesadores lógicos son una de las áreas más importantes de mejora de hardware, seguramente aumentará la demanda de personas que entiendan y puedan implementar sistemas complejos.
Finalmente, hay muchas personas que piensan que la solución es simplemente "agregar paralelización". a menudo, es mejor acelerar la implementación existente. Es mucho más fácil y mucho más sencillo en muchos casos. muchos programas en la naturaleza nunca han sido optimizados; Algunas personas simplemente tuvieron la impresión de que la versión no optimizada sería eclipsada por el hardware algún día pronto. mejorar el diseño o los algos de los programas existentes también es una habilidad importante si el rendimiento es importante: arrojar más núcleos a los problemas no es necesariamente la mejor o más simple solución.
Al apuntar a las PC modernas, la mayoría de nosotros que necesitamos implementar buenos sistemas paralelos no necesitaremos ir más allá de múltiples subprocesos, bloqueos, bibliotecas paralelas, un libro de lectura, y mucha experiencia escribiendo y probando programas (básicamente, reestructurando significativamente cómo programas de escritura de aproximación).