Hallo
DP,
ich habe eine Frage:
Und zwar programmiere ich einen Nachfolger von Quick Download (Qd).
Da man bei Qd meistens mehrere Dateien hat, möchte ich diese parallel downloaden.
Entweder lastet man seine Bandbreite besser aus, oder man entlastet die Server. (Je nach Downstream von einen selbst und den Upstream des Servers)
Wie macht man das nun am besten?
Zuerst habe ich gedacht: Machst du einfach mehere Threads (vom Benutzer einstellbar), welche alle auf die Liste zugreifen (threadsafe?) und diese durchgehen und überprüfen ob die Datei gedownloadet werden kann.
- Vorteil:
- Effektiv, da nur einmal Threads erstellt werden, diese nie suspenden müssen
- Eine zentrale Stelle kann die Threads verwalten
Nachteil:- Nicht umbedingt Threadsafe
- Zwei Threadkritische Punkte: Zugriff auf die Liste und der Zugriff auf den Eintrag
Eine andere Möglichkeit wäre, dass jeder Eintrag selber seinen Thread verwaltet.
D.h. er wird zum startet des Downloads aufgefordert. Und er erstellt einen Thread füttert ihn mit den Werten und lässt ihn rennen.
Es gäbe dabei zwei verschiedene Möglichkeiten: Onrequest oder Oncreate. Bei wird der Thread erstellt, wenn der Thread benötigt wird, bei zweiterem existiert der Thread immer.
Ersteres freut den
Ram, zweiteres freut den CPU.
- Vorteil:
- Von sich aus Threadsafe, da immer nur ein Thread pro Eintrag arbeitet
Nachteil:- Benötigt mehr Ram (im Oncreate)
- Möglicherweise längere "Arbeitszeiten", da die Threads erstellt werden müssen (im Onrequest)
- Die Verwaltung stellt ein Problem da: Die Liste muss herausbekommen, wann ein neuer Thread gestartet werden kann
Nun wie würdet ihr das lösen?
MfG
xZise
PS: Zum ersteren habe ich schon eine Frage gestellt gehabt:
[TCriticalSection] Teil einer Klasse auf die zugegriffen wird