Wie viele Threads kann ich ausführen, wenn Sie eine Intel Core Duo-CPU verwenden, um den Massendatendownload von Amazon S3 in einer benutzerdefinierten Anwendung zu beschleunigen?

505
briennakh

Wie kann ich herausfinden, wie viele Threads maximal verwendet werden können? Ich bin neu in der Programmierung, also versuche ich herauszufinden, was ich wissen muss. Ich habe 950 GB Dateien zum Herunterladen von Amazon S3. Ich dachte, ich könnte zwei Threads verwenden, von denen jeder die Hälfte dieser Menge herunterlädt und parallel läuft.

Ich hoffe, dass ich durch das Multithreading meiner Anwendung den Massendatendownload von Amazon S3 beschleunigen kann, aber es wäre gut zu wissen, ob mein Computer sogar Multithreading unterstützt.

Computer-Spezifikationen:

  • Modell: MacBook (13 Zoll, Mitte 2010, A1342)
  • Prozessor: 2,4 GHz Intel Core Duo
  • Speicher: 8 GB 1067 MHz DDR3
  • Software: MacOS Sierra 10.12.6

Der Prozessor ist sehr alt und wurde nicht weiter unterstützt, so dass Intel Hyperthreading nicht unterstützt wird. Ich bin mir nicht sicher, ob das Multithreading gut ist. Wenn jedoch Multithreading unterstützt werden kann, wie viele Threads können unterstützt werden und welche Auswirkungen hätte die Leistung, wenn ich zu viele Threads verwende?

Bitte korrigieren Sie mich, wenn ich falsch liege. Ich habe jedoch gelesen, dass ein Nicht-Hyperthreading-Kern nur 1 Thread unterstützen kann. Daher denke ich, dass mein Prozessor möglicherweise bis zu 2 Threads unterstützen kann.

0
Klingt, als müssten Sie sich über [Multitasking] informieren (https://en.wikipedia.org/wiki/Computer_multitasking). Es ist sehr wichtig, die E / A-gebundene Arbeit von der CPU-gebundenen Arbeit zu unterscheiden. Daniel B vor 5 Jahren 1
Was genau meinen Sie damit, wenn Sie sagen: "Ich hoffe, dass Sie das Herunterladen von Bulk-Daten von Amazon S3 beschleunigen können ..." Was ist das? Laden Sie Dateien herunter? Oder etwas anderes? Amazon S3 ist nur ein Dateispeicher-Setup. Ich bin mir nicht sicher, wie Multithreading einer bandbreitenabhängigen Aufgabe wie dieser helfen würde. JakeGould vor 5 Jahren 0
Ich bin neu in der Programmierung, also versuche ich herauszufinden, was ich wissen muss. Ich habe 950 GB Dateien zum Herunterladen von Amazon S3. Ich dachte, ich könnte zwei Threads verwenden, von denen jeder die Hälfte dieser Menge herunterlädt und parallel läuft. @ JakeGould briennakh vor 5 Jahren 0
@briennakh Wie in dieser Antwort angegeben (https://superuser.com/a/1330145/167207), ist das Herunterladen von Dateien in keiner Weise eine CPU-intensive Aufgabe. Sie können mehrere Prozesse starten, die versuchen können, mehrere Dateien parallel herunterzuladen, dies ist jedoch keine CPU-gebundene Aufgabe. Es hängt alles von der Bandbreite und Ihrer Netzwerkverbindung ab. JakeGould vor 5 Jahren 1
Ahhh OK. Vielen Dank, ich freue mich über Ihre Zeit, um meine Noob-Frage zu beantworten. Der Grund, warum ich gedacht hatte, dass dies funktionieren würde, liegt an dieser Empfehlung: https://boto3.readthedocs.io/de/latest/guide/resources.html#multithreading-multiprocessing briennakh vor 5 Jahren 0
@ briennakh Cool! Freue mich zu helfen. Nur um zu wissen, dass der Hauptvorteil der Ausführung von zwei Prozessen für das Herunterladen von Dateien darin besteht, dass Sie Ihre Wetten verbreiten, damit Sie keine Ausfallzeiten haben. Das heißt, wenn Sie einen Download haben, dann verlangsamt es sich ... Nichts kann die Lücke aufholen. Wenn Sie jedoch - beispielsweise sagen wir - zwei Downloads ausführen und einer verlangsamt, kann der zweite Prozess die Verlangsamung des anderen Prozesses nutzen, um mehr Netzwerkbandbreite zu nutzen. Ein einzelner Prozess kann niemals mit solchen Aufgaben zu tun haben. JakeGould vor 5 Jahren 0

2 Antworten auf die Frage

2
Yury Schkatula

Es gibt mehrere falsche Annahmen in Ihrer Frage, also lassen Sie mich hier klarstellen:

  1. Multithreading ist auch bei Single-Core-CPUs möglich. Die Ausführung teilt sich nur zeitlich auf, so dass in jedem Moment 1 Thread aktiv ist. Die Ausführung der Threads ist jedoch insgesamt parallel.
  2. Multithreading ist nicht gleichbedeutend mit einer Beschleunigung. Bei naivem Design ist die Multithreading-App immer um das Zehn- oder Hundertfache langsamer als die Single-Threaded-App.
  3. Das Herunterladen von externen Netzwerken ist in 99% der Fälle nicht vom Multithreading abhängig. Es lohnt sich, einen Blick auf das Herunterladen von HTTPs mit mehreren Bereichen zu werfen, wie es in Apps wie NetAnts, ReGet und anderen aus dem Wählmodem-Zeitalter implementiert wurde. Es kann jedoch nicht garantiert werden, dass das Herunterladen von mehreren Bereichen aufgrund verschiedener Netzwerkrichtlinien und involvierter Server möglicherweise schneller als das reguläre Herunterladen ist.

Also immerhin. Sie müssen unbedingt Metriken in Ihrer App sammeln: Was ist der langsamste Vorgang? Und dann umgestalten, um mehr Geschwindigkeit zu erreichen.

1
Ramhound

Wie kann ich herausfinden, wie viele Threads maximal verwendet werden können?

Intel Core Duo verfügt über 2 Threads, da es einen 2-Kern-Single-Thread-Prozessor hat. Jeder Kern hat die Fähigkeit eines einzelnen Threads.

Wenn jedoch Multithreading unterstützt werden kann, wie viele Threads können unterstützt werden und welche Auswirkungen hätte die Leistung, wenn ich zu viele Threads verwende?

Es unterstützt 2 Threads.

Ich denke also, mein Prozessor kann vielleicht bis zu 2 Threads unterstützen, danach hätten weitere Threads einen vernachlässigbaren Effekt.

Es ist nicht in der Lage, mehr als 2 Threads zu bearbeiten. Ihre Multithread-Anwendung hat nur zwei Threads, da Sie aufgrund der Hardware nur zwei Threads generieren können.