désolé Pol63 je ferai de mon mieux la prochaine fois.
Version imprimable
désolé Pol63 je ferai de mon mieux la prochaine fois.
Est-ce que là ça s'applique? :aie:Citation:
si vous ne comprenez pas ce que je dis, demandez à google
Bon petites explications entre multi-core, multi-threads, multi-processus, et pour finir la synchronisation des threads ou des processus.
tout le monde sais qu'un processeur multi-core, équivaut à N processeurs. jusque là c'est facile à comprendre, d'ailleurs pour windows, le fait que tu dispose d'un processeur 4 coeurs ou de 4 processeur est strictement identique... la gestion est légèrement différente, mais cela se situe dans les couches primaires du noyau de l'os.
d'ailleurs plus fort encore, si votre processeur type core i7 6 core (le dernier né) a ses options Hyper Threading actives, votre système ne verra pas 6 processeurs, mais bien 12... 6 physique et 6 logiques... pour le système cela ne change rien à quelques détails prêts.
ca s'était pour le hardware.
Maintenant que ce passe t'il dans votre OS favori... et bien en fait, il se passe à peu près la même chose dans tous les OS, enfin plus ou moins...
Votre est équipé dans son intimité d'un SCHEDULER ou ORDONNANCEUR en Français.
En fait le scheduler existe depuis qu'on a inventé les systèmes multi-utilisateurs. Cela servait à l'époque des machines monoprocesseur uniquement, à donner l'illusion de multi-tâche, en faisant un partage de temps, équitable entre les processus, en leur donnant un quantum d'exécution, chacun leur tour, en fonction des priorités d'exécution.
Depuis les machines ont évoluées, les processeurs se sont multipliées et maintenant les coeurs, on a donc généralisé les scheduler pour qu'ils fassent la même chose mais pas sur une seule unité mais sur plusieurs simultanément.
Techniquement cela ne change pas grand chose, au problème, on dispose juste de plus de ressource à attribuer.
Le Scheduleur est le maître absolu, il possède un contrôle bas niveau sur le processeur en mode Kernel, et ses entrées/sorties, et particulièrement sur les circuits de gestion d'horloge programmables.
Quand un processus est divisé en plusieurs threads, cela équivaut à avoir plusieurs processus qui vont avoir le droit de s'exécuter simultanément, ou en partage de temps, selon les ressources disponibles.
la seule différence est que les threads et les processus, c'est que les threads se partage le même contexte mémoire, et les mêmes ressources, mais pas la même pile d'exécution, comme des processus finalement.
L'ordonnancement se fait donc systématiquement sur les processeurs si le système le peu, et selon la priorité des processus (et éventuellement l'affinité forcée de certains)
Forcer l'affinité du processus à un processeur est stupide, car dès lors, le système ne pourra plus dispatcher les threads du processus sur plusieurs processeurs, mais uniquement sur le(s) processeurs forcé(s).
Donc la fausse croyance qu'un thread est exécuté sur le même processeur que le processus père est infondé, (sauf si affinité définie) surtout que le père est systématiquement dispatché entre chaque processeur au niveau du thread principal, d'ailleurs la notion de thread principale/secondaire pour le système est floue, et pour lui un thread est un thread.
Maintenant pour la gestion et la synchronisation des processus... Ce n'est pas au processeur et au système de régler cela, c'est aux développeurs des applications, le système expose un tas de mécanismes de synchronisations divers et complexes, pour que cela n'arrive pas.
Le problème exposé par certains, ou Dead-locks n'est d'ailleurs pas règlé par le système, d'où des applications qui crash, mais on peut les éliminer depuis la barre des taches... Sauf pour les jeux qui occupent une surface DirectX sur tout l'écran...
En aucun cas une dead lock ne peut faire planter le système d'exploitation, au mieux le matériel, qui du coup fera planter la machine par effet ricochet sur les ressources matérielles occupées, mais là le blocage se fait par la carte mère et les bus, pas par de la volonté de Windows...
Seul un driver mal conçut entrant en conflit avec des applications pourrait neutraliser le scheduler, sans bloquer le matériel et provoquer un plantage critique de windows, mais dans ce cas, il le détectera et vous renverra un jolie bluescreen...
Par conséquent pour mettre fin aux polémiques, le simple fait de créer plusieurs threads dans l'application, suffit à faire en sorte que le traitement de celle-ci devienne parallèle sur des systèmes multicoeur/multiprocesseurs.