La buena concurrencia requiere mucho más que lanzar algunos hilos en una aplicación y esperar lo mejor. Hay un rango en la concurrencia de un programa de vergonzosamente paralelo a secuencial pura. Cualquier programa puede usar la ley de Amdahl para expresar cuán escalable es un problema o algoritmo. Un par de calificaciones para una aplicación vergonzosamente paralela sería:
- Sin estado compartido, cada función solo depende de los parámetros pasados
- Sin acceso a dispositivos físicos (tarjetas gráficas, discos duros, etc.)
Hay otras calificaciones, pero con solo estas dos podemos entender por qué los juegos en particular no son tan fáciles como podría pensarse para aprovechar múltiples núcleos. Por un lado, el modelo del mundo que se representará debe compartirse ya que las diferentes funciones calculan la física, el movimiento, aplican inteligencia artificial, etc. Segundo, cada cuadro de este modelo de juego debe representarse en la pantalla con una tarjeta gráfica.
Para ser justos, muchos creadores de juegos usan motores de juegos producidos por terceros. Tomó un tiempo, pero estos motores de juegos de terceros ahora son mucho más paralelos de lo que solían ser.
Hay desafíos arquitectónicos más grandes al tratar con la concurrencia efectiva
La concurrencia puede tomar muchas formas, desde ejecutar tareas en segundo plano hasta un soporte arquitectónico completo para la concurrencia. Algunos idiomas le brindan características de concurrencia muy potentes, como ERLANG , pero requiere que piense de manera muy diferente sobre cómo construir su aplicación.
No todos los programas realmente necesitan la complejidad del soporte multinúcleo completo. Un ejemplo de esto es el software de impuestos, o cualquier aplicación basada en formularios. Cuando pasa la mayor parte de su tiempo esperando que el usuario haga algo, la complejidad de las aplicaciones multiproceso simplemente no es tan útil.
Algunas aplicaciones se prestan a una solución paralela más vergonzosa, como las aplicaciones web. En este caso, la plataforma comienza vergonzosamente paralela y depende de usted no tener que imponer contención de hilos.
La línea de fondo:
No todas las aplicaciones se ven realmente perjudicadas por no aprovechar múltiples hilos (y por lo tanto, núcleos). Para los que están afectados por eso, a veces los cálculos no son amigables con el procesamiento paralelo o la sobrecarga para coordinarlo haría que la aplicación sea más frágil. Desafortunadamente, el procesamiento paralelo todavía no es tan fácil como debería ser hacerlo bien.