6 Stimmen

Leistungsauswirkungen von Prozessen gegenüber Threads

Wenn die Leistung entscheidend ist, ist es natürlich sinnvoll, einen Prototyp zu erstellen und ein Profil zu erstellen. Aber egal, Weisheit und Rat kann auf StackOverflow gesucht werden :)

Gibt es bei der Bearbeitung hochgradig paralleler Aufgaben, bei denen die Kommunikation zwischen den Aufgaben selten ist oder sich für Message-Passing eignet, einen Leistungsnachteil bei der Verwendung von Prozessen (fork() usw.) oder Threads?

Ist der Kontextwechsel zwischen Threads billiger als der zwischen Prozessen? Einige Prozessoren verfügen über eine Einzelbefehl-Kontextumschaltung, nicht wahr? Nutzen die gängigen Betriebssysteme SMP mit mehreren Threads oder Prozessen besser aus? Ist der COW-Overhead von fork() teurer als der von Threads, wenn der Prozess nie auf diese Seiten schreibt?

Und so weiter. Danke!

7voto

Kyle Punkte 953

Der Gedanke, dass Prozesse langsam erstellt werden, ist alt und war in der Vergangenheit viel wahrer. Das Chrome-Team von Google hat irgendwo einen kleinen Absatz darüber geschrieben, dass dies nicht mehr so große Auswirkungen hat, und hier ist Scott Hanselman zu diesem Thema: http://www.hanselman.com/blog/MicrosoftIE8AndGoogleChromeProcessesAreTheNewThreads.aspx

Meiner Meinung nach sind Threads zwar schneller, aber nur mäßig, und derzeit ist es einfacher, bei Threads Fehler zu machen.

Ich habe gehört, dass .NET 4.0 die Thread-Bibliothek erweitern wird... Irgendwas mit system.threading.thread.For ? Und ich kann mir ein paar Stellen vorstellen, an denen ich das tun möchte... Für jedes Element in dieser Liste mit tausend Elementen tun Sie etwas.

http://reedcopsey.com/?p=87

2voto

Frunsi Punkte 7019

Unter der folgenden URL finden Sie einen realen Benchmark und einen Vergleich zwischen fork und pthread_create in einer realen Anwendung, auch wenn dieser aus dem Jahr 2003 stammt und sich die Dinge vielleicht ein wenig geändert haben. Aus diesem Benchmark lässt sich schnell schließen, dass fork besser skaliert, wenn Sie mehr als 500 Prozesse oder Threads haben.

http://bulk.fefe.de/scalable-networking.pdf - Seiten 29 bis 32

1voto

Björn Pollex Punkte 72424

Meine Vermutung wäre, dass Threads schneller sind, da sie die leichtere Lösung sind. Prozesse sind darauf ausgelegt, voneinander isoliert zu sein. Jeder Prozess verwendet seine eigene TLB, während Threads sich einen virtuellen Adressraum teilen (afaik), also könnte dies ein Argument sein. Prozesse sind nützlich, wenn Sie eine Art von verteiltem Rechnen betreiben wollen.

Wenn es um Threading und andere Dinge geht, empfehle ich Ihnen, sich mit OpenMP oder Intel-TBB zu beschäftigen. Diese Leute kennen sich wirklich gut mit Multithreading und High Performance Computing aus.

1voto

jldupont Punkte 87330

Es kommt darauf an, die Isolationskosten Prozesse sind voneinander isoliert (z. B. getrennte Speicherressourcen, Schutz, getrennte Dateihandles usw.), während Threads Ressourcen innerhalb eines Prozesses gemeinsam nutzen können. Es kostet Zeit und Ressourcen, dies zu unterstützen und durchzusetzen Isolierung .

Wie bei allem in diesem Universum, Sie müssen für das, was Sie bekommen, "bezahlen".

0voto

amdmax Punkte 761

Diesem Buch zufolge: http://reiber.org/nxt/pub/Linux/LinuxKernelDevelopment/Linux.Kernel.Development.3rd.Edition.pdf Linux implementiert alle Threads als Standardprozesse. Wenn man bedenkt, dass Sie über COW schreiben - das ist Linux. Aber mehr dazu auf den Seiten 33-34.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X