Linux: Prozesse und Threads in einem Multi-core-CPU
Ist es wahr, dass threads im Vergleich zu Prozessen, sind weniger wahrscheinlich, profitieren von einer multi-core-Prozessor? In anderen Worten, würde der kernel die Entscheidung des threads auf einem single-core anstatt auf mehrere Kerne?
Ich Rede von threads desselben Prozesses.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, wie die (verschiedene) Linux-scheduler damit umgehen, aber inter-thread-Kommunikation wird teurer, wenn die threads laufen auf verschiedenen Kernen.
So kann der Planer entscheiden, laufen die threads eines Prozesses auf der gleichen CPU wenn es andere Prozesse benötigen CPU-Zeit.
ZB mit einem Dual-Core-CPU, wenn es zwei Prozesse mit zwei threads und alle sind mit allen CPU-Zeit, die Sie bekommen, ist es besser zu laufen, die zwei threads von dem ersten Prozess auf dem ersten Core und die zwei Fäden, die von dem anderen Prozess auf dem zweiten Kern.
Das ist mir neu. Linux im speziellen, macht wenig Unterschied zwischen threads und Prozessen. Sie sind wirklich nur Prozesse, die teilen Ihre-Adresse-Raum.
Mehrere single-threaded Prozesse sind teurer, um das system als einziges multi-threaded lieben. Aber Sie profitieren von multicore-CPU mit gleicher Effizienz. Plus inter-thread-Kommunikation ist viel billiger als inter-Prozess-Kommunikation. Wenn diese threads wirklich form eine einzige Anwendung, die ich Stimme für multithreading.
Shared-memory multithreading auferlegt, enorme Komplexität, Kosten, auf alles, was von Ihrem tool-Kette, zur Entwicklung, zum debugging, Argumentation, und testen Sie Ihren code. Verwenden Sie NIEMALS shared-memory multithreading, wo man davon ausgehen kann, verwenden Sie ein multi-Prozess-design.
@Marcelo ist richtig, jeder anständige OS behandeln werde, threads und Prozesse sehr ähnlich, einige der cpu-Affinität für threads kann die Verringerung der multi-Prozessor Nutzung von multi-threaded-Prozess, aber Sie sollten sehen, dass mit zwei beliebigen Prozessen, die eine gemeinsame .text-segment als auch.
Pick-threads vs. Prozesse basierend auf Komplexität und architektonischen design-Einschränkungen, die Geschwindigkeit wird fast nie kommen.
Es eigentlich hängt alles von dem scheduler, der Art des multiprocessing und aktuellen Umgebung.
Davon ausgehen, nichts, testen, testen, testen!
Wenn Sie nur multi-threaded-Prozess auf dem system, multi-threading ist im Allgemeinen eine gute Idee.
Jedoch, aus der Perspektive der einfachen Entwicklung, manchmal möchte man getrennte Adress-Räume und gemeinsam genutzten Daten, insbesondere in NUMA-Systemen.
Eine Sache ist sicher: Wenn es eine 'HyperThreaded' system-threads sind viel effizienter Kraft schließen-Speicher freigeben.
Ob es eine regelmäßige multi-core-Verarbeitung.. es sollte ähnlich sein.
Wenn es ein NUMA-system, sind Sie besser dran halten freigegebenen Daten und code zu trennen. Wieder, es ist alle Architektur abhängig, und es spielt keine Rolle, performance-Weise, es sei denn, Sie sind in der HPC-Geschäft.
Wenn Sie sind in der HPC (supercomputing) business, TESTEN!. Es ist alles Maschine abhängig (und die Vorteile sind 10-25% im Durchschnitt, es wichtig ist, wenn du redest Tage Unterschied)
In der Erwägung, dass Windows verwendet, Fasern und Fäden manchmal denke ich Linux verwendet Prozesse und Bindfäden.
Ich habe festgestellt, dass im schreiben von multi-threaded Prozesse haben Sie wirklich zu sein, streng, pedantisch, diszipliniert und stur bei der Gestaltung threaded-Prozessen, um für Sie, um die balance der Vorteil bei der Verwendung unabhängig von Anzahl der cores verfügbar sind, die auf die Maschine, mit der der Prozess laufen soll.
Ist es wahr, auf Linux, dass threads im Vergleich zu Prozessen, sind weniger wahrscheinlich, profitieren von einer multi-core-Prozessor? Niemand weiß.