Question

Quelle est la différence entre threading et parallélisme?

Lequel a l'avantage sur l'autre?

Était-ce utile?

La solution

Daniel Moth (un ancien de mes collègues) - Threading / L'article «concurrence / parallélisme» explique tout.

Cité:

  

Pour tirer parti des multiples cœurs de notre logiciel, finalement   les fils doivent être utilisés. De ce fait, certains développeurs tombent   le piège de l’assimilation du multithreading au parallélisme. Ce n'est pas   précis ... Vous pouvez avoir le multithreading sur une machine simple noyau, mais   vous ne pouvez avoir du parallélisme que sur une machine multi-core

     

Le test rapide: si vous utilisez des threads sur une seule machine principale et que cela convient parfaitement à votre scénario, vous ne faites pas de "parallélisme", vous ne faites que du multithreading.

Autres conseils

Le parallélisme est une technique générale consistant à utiliser plusieurs flux d'instructions pour effectuer un calcul. L'aspect critique de toutes les techniques parallèles est la communication entre les flux pour collaborer à une réponse finale.

Le filetage est une implémentation spécifique du parallélisme. Chaque flux d'instructions reçoit sa propre pile afin de conserver un enregistrement des variables locales et des appels de fonction, et communique implicitement avec les autres flux par mémoire partagée.

Un exemple pourrait être qu'un seul thread mette simplement en file d'attente les demandes de disque et les transmette à un thread de travail, parallélisant efficacement le disque et le processeur. La méthode UNIX traditionnelle consiste à scinder ces programmes en deux programmes complets, dites "chat". et grep dans la commande:

cat /var/log/Xorg.0.log | grep "EE"

Le threading pourrait éventuellement réduire les coûts de communication liés à la copie des E / S de disque du processus cat au processus grep.

On appelle généralement threading le fait que plusieurs processus fonctionnent simultanément sur un même processeur (en fait, vous ne pensez pas qu'ils le font, mais ils basculent très rapidement entre eux).

Le parallélisme consiste à avoir plusieurs processus fonctionnant en même temps sur plusieurs CPU.

Les avantages et les inconvénients des deux logiciels dépendent fortement du planificateur utilisé par votre système d'exploitation. Généralement, le coût de la création d’un thread est beaucoup moins élevé qu’un processus sur un autre processeur. Toutefois, le fait de disposer d’un processeur «entier» augmente la vitesse globale de ce processus. Mais là encore, si ce processus a besoin de communiquer avec un autre processus sur un autre processeur, vous devez résoudre le problème de la communication IPC (communication interprocessus) qui peut entraîner une surcharge telle qu’il est préférable d’utiliser un thread sur le même processeur.

La plupart des systèmes d'exploitation sont conscients de la présence de plusieurs processeurs / cœurs et peuvent les utiliser, mais le planificateur est généralement assez complexe.

Si vous programmez dans un langage utilisant une machine virtuelle (machine virtuelle), sachez qu'ils doivent implémenter leur propre planificateur (le cas échéant). Python, par exemple, utilise un GIL, qui indique à peu près que tout ce qui tourne sur cette machine virtuelle reste toujours sur le même processeur. Bien que certains systèmes d’exploitation soient capables de migrer un processus lourd vers un autre processeur qui n’est pas si occupé pour le moment, cela signifie bien sûr que l’ensemble du processus doit être suspendu pendant cette opération.

Certains systèmes d’exploitation tels que DragonFlyBSD adoptent une approche totalement différente en matière de planification, qu’à l’heure actuelle «standard».

Je pense que cette réponse vous donne suffisamment de mots-clés pour rechercher plus d'informations: -)

Le threading est une technologie, le parallélisme est un paradigme qui peut être implémenté à l'aide de threading (mais qui peut tout aussi facilement être réalisé à l'aide de threads uniques sur plusieurs processeurs)

Voici la meilleure réponse pour dissiper les doutes de quiconque concernant le parallélisme et le threading.

  

Les threads sont une construction logicielle. Je peux commencer autant de pthreads que je veux, même sur un vieux processeur monocœur. Le multi-threading n’est donc pas nécessairement parallèle: il n’est parallèle que si le matériel peut le prendre en charge. Donc, si vous avez plusieurs cœurs et / ou hyperthreading, votre multi-threading devient parallèle. Et ces jours-ci, c’est la plupart du temps.

     

La simultanéité concerne des activités pour lesquelles aucun ordre temporel n'est défini. Encore une fois, si le matériel le prend en charge, cela peut être fait en parallèle, sinon, pas.

     

Ainsi, traditionnellement, le multi-threading est presque synonyme de simultanéité. Et les deux ne deviennent parallèles que si le matériel le prend en charge. Même dans ce cas, vous pouvez démarrer beaucoup plus de threads que le matériel ne prend en charge, et vous restez avec une concurrence.

De la une réponse de Victor Eijkhout sur Quora .

Comment définissez-vous le "parallélisme"? Le multithreading est une implémentation concrète du concept d'exécution de programme parallèle.

L'article lié à RichardOD semble être principalement concerné par le fait que les threads sont réellement exécutés en parallèle sur une machine à béton.

Cependant, votre question semble considérer le multithreading et le parallélisme comme des contraires. Voulez-vous dire peut-être des programmes qui utilisent plusieurs processus plutôt que plusieurs threads? Si tel est le cas, les différences sont les suivantes:

  • Les threads sont beaucoup moins chers à créer que les processus. C’est la raison pour laquelle l’utilisation de threads plutôt que de processus a entraîné une accélération considérable des applications Web - on l’appelait alors "FastCGI".
  • Plusieurs threads sur le même ordinateur ont accès à la mémoire partagée. Cela rend la communication entre les threads beaucoup plus facile, mais aussi très dangereuse (il est facile de créer des bogues, comme les conditions de course, qui sont très difficiles à diagnostiquer et à corriger).

Le filetage est le parallélisme d'un pauvre.

EDIT: Pour être plus précis:

Le filetage n’a rien à voir avec le parallélisme et inversement. Le filetage consiste à faire sentir que certains processus s'exécutent en parallèle. Cependant, cela ne rend pas les processus complets TOUTES leurs actions plus rapidement au total.

Si nous pensons que le processeur est une entreprise et que ses threads sont ses employés , cela nous aide à comprendre plus facilement le threading et le parallélisme.

Comme une entreprise compte de nombreux travailleurs, le processeur comporte également de nombreux threads.

De plus, il peut y avoir plusieurs sociétés et, par conséquent, plusieurs processeurs.

Par conséquent, lorsque les travailleurs (threads) travaillent dans une entreprise (CPU), cela s'appelle threading .

Et lorsque deux ou plusieurs entreprises (CPU) travaillent indépendamment ou ensemble, on parle de parallélisme .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top