2016-08-31 6 views
0

Ich beginne zu schätzen, die Nützlichkeit der Threading - Bibliothek auf Python und ich fragte mich, was die optimale Anzahl von Threads offen zu halten, um die Effizienz der Skript läuft ich.CPU - Kerne, Laufflächen und optimale Anzahl von Arbeitern - Python Threading

Bitte beachten Sie, dass meine erste und einzige Priorität Geschwindigkeit ist, brauche ich nicht/tun andere Sachen zu Multitasking (man denke an eine Rechen dedizierter Server)

Um genau zu sein, wenn ich auf ein 4 laufen Kerne/4 Threads CPU, wird die optimale Anzahl von Threads 4 sein? 8? 16? Andererseits, wenn ich mehr als einen Thread pro Kern (4 Kern 8 t) hätte, würde sich die Antwort ändern? Beeinflusst die CPU-Clock auch das?

Ich verstehe, dass es eine Vielzahl von Implikationen in dieser Angelegenheit gibt, aber so viel wie meine Forschung zu diesem Thema ging, fühle ich mich immer noch sehr im Dunkeln. (Ich habe festgestellt, es ist nicht so einfach wie n threads = n prozesse)

+1

Die Threading-Bibliothek behandelt nicht mehrere Kerne. Überprüfen Sie die Multiprocessing-Bibliothek. Beachten Sie nur die Unterschiede zur Handhabung der Objekte im Speicher. –

+2

Wenn Sie versuchen, alle Ihre Kerne optimal zu nutzen, wird Python-Threading Ihnen dabei nicht helfen. Der globale Interpreter sperrt stark Python-Threads. – user2357112

+1

Um weiter zu kommentieren, ist die Threading-Bibliothek gut für die Verarbeitung von IO-gebundenen Aufgaben. Wenn Sie die Threading-Bibliothek verwenden möchten, beachten Sie, dass Sie aufgrund der GIL nicht davon profitieren, mehr als nur Threads für CPU-gebundene Aufgaben auszuführen. –

Antwort

1

Die Frage ist sehr komplex, weil auf der gleichen CPU kann eine beliebige Anzahl von anderen Threads ausgeführt werden, von Prozessen, die nicht unter Ihrer Kontrolle sind.

Stattdessen können Sie abschätzen, wann ein bestimmter Codeabschnitt von einem separaten Thread ausgeführt werden soll, basierend auf der Zeit, die zum Erstellen eines neuen Threads benötigt wird.

+0

Ich wusste von GIL, wusste nicht, dass es auch die Wirksamkeit der Thread-Erstellung beeinflusst. Das Problem bei Multiprocessing besteht darin, dass ich, wenn ich meinen Code nicht auf eine effizientere Weise entwerfe, eine erhebliche Overhead-schädigende Leistung habe – Asher11

Verwandte Themen