Qu'est-ce que la simultanéité ?
Concurrency : fait référence à l'exécution alternée de plusieurs tâches dans un certain laps de temps. Lorsque plusieurs threads fonctionnent, le temps d'exécution du processeur est divisé en plusieurs périodes, puis les périodes sont allouées à chaque thread pour l'exécution. Pendant que le code d'un thread est en cours d'exécution, les autres threads sont suspendus.
Dans un environnement concurrent, la fermeture du programme est interrompue et les caractéristiques suivantes apparaissent :
● Il existe une relation de restriction mutuelle entre les programmes concurrents. Les contraintes directes se reflètent dans un programme nécessitant les résultats de calcul d'un autre programme ; les contraintes indirectes se reflètent dans plusieurs programmes en compétition pour des ressources partagées, telles que des processeurs, des tampons, etc.
● Le processus d'exécution des programmes concurrents est intermittent. Le programme doit mémoriser les instructions sur site et les points d'exécution.
● Lorsque le nombre de simultanéités est défini de manière appropriée et que le processeur dispose d'une puissance de traitement suffisante, la simultanéité améliorera l'efficacité de l'exécution du programme.
Dans un environnement concurrent, lorsqu'un objet est accessible par plusieurs threads, l'objet peut être modifié par n'importe quel thread accédé, ce qui entraîne une incohérence des données. Par conséquent, le concept de sécurité des threads est proposé.
Concurrence et parallélisme
sont des concepts très déroutants. La concurrence fait référence à l'exécution alternée de plusieurs tâches, tandis que le parallélisme fait référence à « l'exécution en même temps » au vrai sens du terme. En fait, s'il n'y a qu'un seul processeur dans le système et que le multithread est utilisé, il ne peut pas être parallélisé dans l'environnement système réel. Cela ne peut être fait qu'en alternance en changeant de tranche de temps pour exécuter les tâches simultanément. Le véritable parallélisme ne peut se produire que sur les systèmes dotés de plusieurs processeurs.
[Apprentissage recommandé : Tutoriel vidéo Java]
Pourquoi devons-nous utiliser la simultanéité ?
La programmation simultanée est dans une certaine mesure indissociable du développement des processeurs multicœurs. Avec le développement des processeurs monocœur, il n'est plus possible de suivre la « loi de Moore » (la loi de Moore est la loi d'observation du développement matériel, et il existe également la « loi anti-Moore » basée sur la « loi de Moore », mais " La loi anti-Moore" est une loi dans le domaine du logiciel, ceux qui sont intéressés peuvent l'apprendre par eux-mêmes), afin d'améliorer encore la vitesse de calcul, les ingénieurs matériels ne recherchent plus des unités de calcul séparées, mais intègrent plusieurs unités de calcul ensemble, qui consiste à former un processeur multicœur. En seulement une douzaine d’années, les processeurs domestiques comme l’Intel i7 peuvent atteindre 4 cœurs, voire 8 cœurs. Les serveurs professionnels peuvent généralement avoir plusieurs processeurs indépendants, et chaque processeur possède même jusqu'à 8 cœurs ou plus.
Par conséquent, la « loi de Moore » semble continuer à être expérimentée dans l'expansion du cœur du processeur. Dans le contexte des processeurs multicœurs, la tendance à la programmation simultanée est apparue La programmation simultanée peut maximiser la puissance de calcul des processeurs multicœurs et améliorer les performances.
Il est intrinsèquement adapté à la programmation simultanée dans des scénarios commerciaux spéciaux. Par exemple, dans le domaine du traitement d'images, une image de 1024 x 768 pixels contient plus de 786 000 pixels. Il faut beaucoup de temps pour parcourir tous les pixels d'un côté. Face à un calcul aussi complexe, il est nécessaire d'exploiter pleinement la puissance de calcul de plusieurs cœurs.
De plus, lors du développement d'une plateforme d'achat, afin d'améliorer la vitesse de réponse, des opérations telles que le fractionnement, la réduction des stocks, la génération de commandes, etc. peuvent être fractionnées et complétées à l'aide de la technologie multi-thread. Face à des modèles commerciaux complexes, les programmes parallèles seront plus adaptables aux besoins de l'entreprise que les programmes sériels, et la programmation simultanée est plus cohérente avec ce type de division commerciale. C'est précisément en raison de ces avantages que la technologie multithread peut être valorisée. et c'est aussi ce qu'un apprenant CS doit maîtriser :
● Utiliser pleinement la puissance de calcul du processeur multicœur
● Faciliter le fractionnement des activités et améliorer les performances des applications
Quels sont les inconvénients de la programmation simultanée ?
1. Changement de contexte fréquent La tranche de temps est le temps alloué par le CPU à chaque thread. Parce que le temps est très court, le CPU change constamment de thread, ce qui nous fait sentir cela. il existe plusieurs threads. Ils sont exécutés simultanément et la tranche de temps est généralement de plusieurs dizaines de millisecondes. Chaque fois que vous changez, vous devez enregistrer l'état actuel afin de pouvoir restaurer l'état précédent. Ce comportement de commutation est très gourmand en performances. Une commutation trop fréquente ne profitera pas de la programmation multithread. Généralement, le changement de contexte peut être réduit par une programmation simultanée sans verrouillage, un algorithme CAS, en utilisant un minimum de threads et en utilisant des coroutines. Programmation simultanée sans verrouillage : vous pouvez vous référer à l'idée de segmentation des verrous ConcurrentHashMap. Différents threads traitent différents segments de données, de sorte que dans des conditions de concurrence multithread, le temps de changement de contexte peut être. réduit. L'algorithme CAS utilise l'algorithme CAS pour mettre à jour les données de manière atomique et utilise un verrouillage optimiste, ce qui peut réduire efficacement certains des changements de contexte causés par une concurrence de verrouillage inutile Utilisez le moins de threads : évitez de créer des éléments inutiles Par exemple, s'il y a peu de tâches, mais que beaucoup de threads sont créés, cela entraînera la mise en attente d'un grand nombre de threads Coroutine : réalisez une planification multi-tâches en une seule. thread et effectuez une planification multitâche dans un seul thread. Continuez à basculer entre plusieurs tâches dans le thread.
Étant donné que le changement de contexte est une opération relativement longue, il existe une expérience dans le livre "The Art of Concurrent Programming in Java". L'accumulation simultanée n'est peut-être pas plus rapide que l'accumulation en série.
2. Problèmes de sécurité des threads
La chose la plus difficile à comprendre dans la programmation multithread est le problème de sécurité des threads dans les sections critiques. Des blocages se produiront si vous ne faites pas attention. , Les fonctions du système peuvent devenir indisponibles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!