Threading vs parallélisme, en quoi diffèrent-ils?
Quelle est la différence entre le threading et le parallélisme?
Lequel a un avantage sur l'autre?
8 réponses
Daniel Moth( un ancien collègue) - Threading / concurrence vs parallélisme article explique tout.
Cité:
Pour tirer parti de plusieurs cœurs de notre logiciel, en fin de Compte threads doivent être utilisés. En raison de ce fait, certains développeurs tombent dans 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 à un seul cœur, mais vous ne pouvez avoir de parallélisme que sur une machine multi-cœur
Le test rapide: si sur une machine à un seul cœur vous utilisez des threads et que cela est parfaitement logique pour votre scénario, alors vous ne "faites pas de parallélisme", vous faites juste du multithreading.
Le parallélisme est une technique générale d'utilisation de plus d'un flux d'instructions pour compléter un calcul. L'aspect critique de toutes les techniques parallèles est la communication entre les flux pour collaborer une réponse finale.
Threading est une implémentation spécifique du parallélisme. Chaque flux d'instructions reçoit sa propre pile pour conserver un enregistrement des variables locales et des appels de fonctions, et communique implicitement avec les autres flux par mémoire partagée.
Un exemple pourrait être demandez à un thread de simplement mettre en file d'attente les demandes de disque et de les transmettre à un thread de travail, parallélisant efficacement le disque et le processeur. La méthode UNIX pipes traditionnelle consiste à les diviser en deux programmes complets, par exemple " cat " et grep dans la commande:
cat /var/log/Xorg.0.log | grep "EE"
Le filetage pourrait réduire les coûts de communication liés à la copie des E/S disque du processus cat vers le processus grep.
Le Threading est généralement appelé à avoir plusieurs processus fonctionnant en même temps sur un seul processeur (Eh bien en fait, vous ne pensez pas qu'ils le font mais ils changent très rapidement entre eux).
Le parallélisme consiste à avoir plusieurs processus fonctionnant en même temps sur plusieurs CPU.
Les deux ont leurs avantages et leurs inconvénients fortement en fonction du planificateur utilisé par votre système d'exploitation. Habituellement le coût de calcul de la création d'un thread est beaucoup plus faible que la génération d'un processus sur un autre processeur, cependant, avoir un processeur "entier" pour vous-même 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 IPC (inter process communication) qui pourrait être un tel surcoût qu'il est effectivement préférable d'utiliser un thread sur le même processeur.
La plupart des systèmes d'exploitation connaissent plusieurs processeurs/cœurs et peuvent les utiliser, mais cela rend le planificateur généralement assez complexe.
Si votre programmez dans un langage qui utilise 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 dit à peu près que tout ce qui fonctionne 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, ce qui signifie Bien sûr que l'ensemble du processus doit être mis en pause pendant qu'il le fait.
Certains systèmes d'exploitation comme DragonFlyBSD adopter une approche complètement différente de la planification alors ce qui en ce moment est l'approche "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é en utilisant le threading (mais pourrait tout aussi facilement être fait en utilisant des threads simples sur plusieurs processeurs)
Voici la meilleure réponse pour effacer les doutes de quiconque liés au parallélisme et au threading. [Je l'ai lu sur quora et trouvé utile de partager avec les lecteurs.]
Les Threads sont une construction logicielle. Je peux démarrer autant de pthreads que je veux, même sur un vieux processeur single core. Le multi-threading n'est donc pas nécessairement parallèle: il n'est parallèle que si le matériel peut le supporter. Donc, si vous avez plusieurs cœurs et / ou hyperthreading, votre multi-threading devient parallèle. Et ces jours ci c'est, en fait, la plupart du temps.
La concurrence concerne les activités qui n'ont pas d'ordre temporel clair. Encore une fois, si le matériel le supporte, ils peuvent être faits en parallèle, sinon, non.
Donc, traditionnellement, le multi-threading est presque synonyme de concurrence. Et les deux ne deviennent parallèles que si le matériel le supporte. Même alors, vous pouvez démarrer beaucoup plus de threads que le matériel prend en charge, et vous êtes laissé avec la concurrence.
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 principalement concerné par la question de savoir si les threads sont réellement exécutés en parallèle sur une machine concrète.
Cependant, votre question semble voir le multithreading et le parallélisme comme opposés. Voulez-vous peut-être dire des programmes qui utilisent plusieurs processus plutôt que plusieurs threads? Si oui, les différences sont:
- les Threads sont beaucoup moins chers à créer que les processus. C'est pourquoi l'utilisation de threads plutôt que de processus a entraîné une accélération énorme dans les applications web - cela a été appelé "FastCGI".
- Plusieurs threads sur la même machine 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 bugs comme des conditions de course qui sont très difficiles à diagnostiquer et à corriger).
Le filetage est le parallélisme d'un pauvre homme.
EDIT: pour être plus précis:
Threading n'a rien à voir avec le parallélisme et sage versa. Le Threading consiste à faire sentir que certains processus s'exécutent en parallèle. Cependant, cela ne rend pas les processus complets toutes leurs actions plus rapides au total.
Si nous pensons que CPU en tant qu'entreprise et threads en tant que ses travailleurs alors, cela nous aide à comprendre plus facilement le threading et le parallélisme.
Comme une entreprise a beaucoup de travailleurs, le CPU a aussi beaucoup de threads.
Il peut également y avoir plus d'une entreprise et donc il peut y avoir plus d'un CPU.
, par conséquent, lorsque les travailleurs(threads) travailler dans une entreprise(CPU), il est appelé filetage.
Et lorsque deux ou plusieurs entreprises(CPU) travaillent indépendamment ou ensemble, il est appelé parallélisme.