CLRium # 6: Concurrence et parallélisme. Deux jours: du processeur à l'async / attente




Comme vous l'avez déjà remarqué, le format du séminaire a évolué et a pris une nouvelle forme: chaque séminaire suivant est désormais entièrement consacré à un sujet. Le cinquième était consacré au sujet de Garbage Collector et en 10 heures a révélé tout ce qui était possible, laissant des questions absolument privées derrière les crochets. Et son point culminant était un rapport sur l'application pratique (une question qui intéresse tout le monde - "pourquoi savoir tout cela ??")


La deuxième question, que je pense que tout le monde veut savoir, mais en règle générale, il n'y a pas de temps pour cela, est la question de travailler en code multi-thread et la question de la planification et du support de son architecture. Ces questions sont assez complexes, effrayantes et souvent répugnantes en général. Et c'est exactement pourquoi le développeur ordinaire ne va pas au-delà des constructions de synchronisation les plus simples. Mais il y a tellement de choses intéressantes autour :)


Il n'y a pas si longtemps, j'ai compris une vérité apparemment simple: pour comprendre le fonctionnement des abstractions de niveau supérieur, vous devez comprendre le fonctionnement des abstractions de niveau inférieur. En d'autres termes, pour comprendre comment travailler avec du code multithread au niveau asynchrone / attendre, vous devez connaître au moins les primitives de synchronisation et les autres bases du code multithread dans .NET. Et ce qui est encore mieux - un peu du niveau du système d'exploitation. Après cela, la plupart des abstractions de niveau supérieur deviendront claires automatiquement.


Lors du nouveau séminaire, qui cette fois ne concerne pas seulement la plate-forme .NET, comme il l'était auparavant, mais couvre essentiellement n'importe quelle plate-forme (après tout, le code multithread fonctionne sur la base d'abstractions de niveau inférieur), nous révélerons ce sujet dans les détails:


Plan de l'atelier


Les bases


Pour commencer, nous considérerons la base: tout ce qui remonte au système d'exploitation et au processeur. Après tout, toute mécanique de haut niveau fonctionne selon les règles de l'inférieur. Cela comprendra les bases de l'architecture du processeur, les primitives de synchronisation et les API des systèmes d'exploitation Windows et Linux. Saviez-vous qu'il existe plusieurs types de processus à eux seuls?


BCL, Schedulers, Thread Locals, STA / MTA ...


Après avoir examiné ces abstractions et examiné les règles de travail avec elles, nous nous concentrerons sur les abstractions de base de la plate-forme elle-même: BCL, Thread Locals, thread pools et autres bases. Ces abstractions sont partout, mais des exemples seront pour la plate-forme .NET. Nous verrons la relation avec le système d'exploitation, leurs performances, ainsi que l'applicabilité dans diverses situations. Enfin, nous comprendrons de nombreux problèmes qui n'ont pas été atteints: contextes de synchronisation, STA / MTA, fonctionnement de Thread Locals, et bien plus encore.


Mécanique des plateformes


À chaque nouvelle abstraction, plus étant donné que tout sera dit côte à côte: en un jour, vous commencerez à relier toutes les connaissances les unes aux autres et nous passerons en douceur à divers mécanismes d'un niveau supérieur: ordonnanceurs, arrière-plan, modèles de développement de code multithread.


Algorithmes sans verrouillage


tout le chemin pour asynchroniser / attendre. Et à la fin, nous examinerons des algorithmes de multithreading plus avancés. Nous analyserons une paire d'algorithmes sans verrouillage afin que chacun de vous puisse les créer vous-même. Et après cela, nous apprendrons à faire des exigences pour le développement de la nôtre.


PLINQ / async-wait


De plus, après avoir absorbé les connaissances de base, nous commencerons à étudier des bibliothèques de niveaux élevés d'abstractions: de PLINQ à async / wait, en analysant les caractéristiques de travailler avec chacun. Ici, je veux dire que vous connaissez approximativement les bibliothèques elles-mêmes et nous allons nous plonger dans chacune d'entre elles à un niveau légèrement plus hardcore.


Bien sûr, nous ne pourrons pas découvrir le sujet de la concurrence en une seule journée: ce sujet est trop étendu et multiforme. C'est pour cette raison que CLRium # 6 durera deux jours.


Coordonnées


Source: https://habr.com/ru/post/fr460635/


All Articles