Une bonne concurrence nécessite beaucoup plus que de jeter quelques fils dans une application et d'espérer le meilleur. Il existe une gamme dans la façon dont un programme peut passer simultanément d'un parallèle embarrassant à un séquentiel pur. Tout programme donné peut utiliser la loi d' Amdahl pour exprimer à quel point un problème ou un algorithme est évolutif. Quelques qualifications pour une candidature parallèle embarrassante seraient:
- Pas d'état partagé, chaque fonction ne dépend que des paramètres passés
- Pas d'accès aux périphériques physiques (cartes graphiques, disques durs, etc.)
Il existe d'autres qualifications, mais avec seulement ces deux, nous pouvons comprendre pourquoi les jeux en particulier ne sont pas aussi faciles que vous pourriez penser pour tirer parti de plusieurs cœurs. D'une part, le modèle du monde qui sera rendu doit être partagé car différentes fonctions calculent la physique, le mouvement, appliquent l'intelligence artificielle, etc. Deuxièmement, chaque image de ce modèle de jeu doit être rendue à l'écran avec une carte graphique.
Pour être juste, de nombreux fabricants de jeux utilisent des moteurs de jeux produits par des tiers. Cela a pris du temps, mais ces moteurs de jeux tiers sont maintenant beaucoup plus parallèles qu'auparavant.
Il existe de plus grands défis architecturaux pour gérer une concurrence efficace
La concurrence peut prendre plusieurs formes, de l'exécution de tâches en arrière-plan à une prise en charge architecturale complète de la concurrence. Certaines langues vous offrent des fonctionnalités de concurrence très puissantes telles que ERLANG , mais cela vous oblige à penser très différemment à la façon dont vous construisez votre application.
Tous les programmes n'ont pas vraiment besoin de la complexité d'un support multicœur complet. Un tel exemple est le logiciel d'impôt, ou toute application pilotée par formulaire. Lorsque la plupart de votre temps est consacré à attendre que l'utilisateur fasse quelque chose, la complexité des applications multithreads n'est tout simplement pas très utile.
Certaines applications se prêtent à une solution parallèle plus embarrassante, comme les applications Web. Dans ce cas, la plate-forme démarre de manière embarrassante en parallèle et c'est à vous de ne pas avoir à imposer de conflit de thread.
En bout de ligne:
Toutes les applications ne sont pas vraiment blessées en ne profitant pas de plusieurs threads (et donc des cœurs). Pour ceux qui en souffrent, parfois les calculs ne sont pas adaptés au traitement parallèle ou le surcoût pour le coordonner rendrait l'application plus fragile. Malheureusement, le traitement parallèle n'est toujours pas aussi facile qu'il devrait l'être pour bien faire.