eh bien, cela dépend vraiment de ce que vous développez. la réponse, selon ce que vous développez, peut aller de "c'est insignifiant" à "c'est absolument essentiel, et nous attendons de tout le monde dans l'équipe une bonne compréhension et utilisation des implémentations parallèles".
dans la plupart des cas, une bonne compréhension et utilisation des verrous, des threads, des tâches et des pools de tâches sera un bon début lorsque le besoin de parallélisme est requis. (varie selon lang / lib)
Ajoutez à cela les différences dans les conceptions que vous devez faire - pour le multitraitement non trivial, il faut souvent apprendre plusieurs nouveaux modèles de programmation ou stratégies de parallélisation. dans ce cas, le temps d'apprendre, d'échouer suffisamment pour avoir une bonne compréhension et de mettre à jour les programmes existants peut prendre une équipe par an (ou plus). une fois que vous avez atteint ce point, vous (espérons-le!) ne percevrez pas ou n'aborderez pas les problèmes / implémentations comme vous le faites aujourd'hui (à condition que vous n'ayez pas encore effectué cette transition).
un autre obstacle est que vous optimisez efficacement un programme pour une certaine exécution. si vous ne disposez pas de beaucoup de temps pour optimiser les programmes, vous n'en bénéficierez pas autant que vous le devriez. la parallélisation de haut niveau (ou évidente) peut améliorer la vitesse perçue de votre programme avec assez peu d'effort, et c'est aussi loin que de nombreuses équipes iront aujourd'hui: "Nous avons parallélisé les parties vraiment évidentes de l'application" - c'est bien dans certains cas. l'avantage de prendre les fruits bas et d'utiliser une simple parallélisation sera-t-il proportionnel au nombre de cœurs? souvent, quand il y a deux à quatre cœurs logiques, mais pas si souvent au-delà. dans de nombreux cas, c'est un rendement acceptable, compte tenu du temps investi. ce modèle parallèle est l'introduction de nombreuses personnes à la mise en œuvre de bonnes utilisations du parallélisme.
ce que vous apprendrez en utilisant ces modèles parallèles triviaux ne sera pas idéal dans tous les scénarios parallèles complexes; appliquer efficacement des conceptions parallèles complexes nécessite une compréhension et une approche très différentes. ces modèles simples sont souvent détachés ou ont une interaction triviale avec d'autres composants du système. de plus, de nombreuses implémentations de ces modèles triviaux ne s'adaptent pas bien à des systèmes parallèles efficacement complexes - une mauvaise conception parallèle complexe peut prendre autant de temps à s'exécuter que le modèle simple. ill: il s'exécute deux fois plus vite que le modèle à un seul thread, tout en utilisant 8 cœurs logiques pendant l'exécution. les exemples les plus courants utilisent / créent trop de threads et des niveaux élevés d'interférence de synchronisation. en général, on parle de ralentissement parallèle. il est assez facile à rencontrer si vous abordez tous les problèmes parallèles comme des problèmes simples.
alors, disons que vous devez vraiment utiliser le multithreading efficace dans vos programmes (la minorité, dans le climat actuel): vous devrez utiliser le modèle simple efficacement pour apprendre le modèle complexe, puis réapprendre comment vous approchez le flux et l'interaction du programme. le modèle complexe est l'endroit où votre programme devrait finalement être, car c'est là que se trouve le matériel aujourd'hui, et où les améliorations les plus dominantes seront apportées.
l'exécution de modèles simples peut être envisagée comme une fourchette, et les modèles complexes fonctionnent comme un écosystème complexe, euh. Je pense que la compréhension de modèles simples, y compris le verrouillage général et le threading devrait être ou sera bientôt attendue des développeurs intermédiaires lorsque le domaine (dans lequel vous développez) l'utilise. comprendre des modèles complexes est encore un peu inhabituel aujourd'hui (dans la plupart des domaines), mais je pense que la demande augmentera assez rapidement. en tant que développeurs, un plus grand nombre de nos programmes devraient prendre en charge ces modèles, et la plupart des utilisateurs sont loin derrière dans la compréhension et la mise en œuvre de ces concepts. étant donné que le nombre de processeurs logiques est l'un des domaines les plus importants de l'amélioration du matériel, la demande de personnes qui comprennent et peuvent mettre en œuvre des systèmes complexes augmentera certainement.
enfin, beaucoup de gens pensent que la solution consiste simplement à "ajouter une parallélisation". il est souvent préférable de rendre la mise en œuvre existante plus rapide. c'est beaucoup plus facile et beaucoup plus simple dans de nombreux cas. de nombreux programmes à l'état sauvage n'ont jamais été optimisés; certaines personnes avaient juste l'impression que la version non optimisée serait éclipsée par le matériel très prochainement. l'amélioration de la conception ou des algos des programmes existants est également une compétence importante si les performances sont importantes - lancer plus de cœurs aux problèmes n'est pas nécessairement la meilleure ou la solution la plus simple.
Lorsque vous ciblez des PC modernes, la plupart d'entre nous qui ont besoin de mettre en œuvre de bons systèmes parallèles n'auront pas besoin d'aller au-delà du multithreading, du verrouillage, des bibliothèques parallèles, de la valeur d'un livre et de beaucoup d'expérience dans l'écriture et les programmes de test (essentiellement, restructurer de manière significative la façon dont vous approche des programmes d’écriture).