C++ Ressourcesparender Downloader

Tockra

Lt. Commander
Registriert
Dez. 2008
Beiträge
1.063
Hey Leute,

da ich gerade C++ lerne und ein mittelgroßes Projekt zum Üben realisieren möchte, habe ich mir überlegt vielleicht soetwas wie den pyload Core für Unix in C++ zu schreiben. Weitaus nicht so umfangreich, aber mit den Grundfunktionen, da Pyload ja seit ein paar Jahren nicht mehr weiterentwickelt wird und ich außerdem kein bock habe im Augenblick Python zu lernen.
Jetzt bevor ich mir die Mühe mache und die Zeit nehme um das Ding zu bauen, würde ich gerne wissen, ob es aussichten gibt, dass ein in C++ geschriebener Downloader genauso Ressourcesparend ist wie pyload (Python) und ob der selbstgeschriebene Core dann auf dem Raspbarry PI laufen würde.

Grüße
T
 
Ja, mit C++ kannst du z.T. deutlich sparsamer (RAM) und schneller (Laufzeit) unterwegs sein.
 
Python ist (soweit mir bekannt. Kenne mich mit Python leider auch nicht genau aus bzw. kenne die Eigenheiten/Vorteile/Nachteile davon nicht) eine interpretierende Sprache. Das heißt die Programme die ausgeführt werden, liegen in einer Art vor, die Python erst interpretieren muss.
"Ein Interpreter (im Sinne der Softwaretechnik) ist ein Computerprogramm, das einen Programm-Quellcode im Gegensatz zu Assemblern oder Compilern nicht in eine auf dem System direkt ausführbare Datei übersetzt, sondern den Quellcode einliest, analysiert und ausführt." (Quelle: Wikipedia)
Das beudetet, dass C++ - Code, da dieser in Binärcode vorliegt, "eigentlich" perfomanter sein sollte. "Eigentlich" in Klammern, weil ich nicht weiß, wie "gut" der Code ist, den du dem Interpreter vorlegst und wie "gut" der Interpreter ist.
 
PyPy kompiliert vorher auch (sogar Just-in-Time). Ich befürchte, das nimmt sich insgesamt nicht viel, sowohl vom RAM als auch von der CPU.
Wenn Du es aber als Übung machen möchtest ...
 
Wenn der am Ende genau so leistungsstark wie pyload ist, ist das nicht schlimm, für mich ist eigentlich nur wichtig, dass er nicht mehr Leistung benötigt und dass er auf nen Pi läuft.
Mache das zum einen aus Übung und zum anderen, weil mich ein paar Eigenheiten von Pyload stören.

Kann mir jmd. sagen, ob man eine Version für alle Unix Versionen schreiben kann, oder ob man für den Raspberry Pi z.B. auf einige Bibiliotheken verzichten muss?
 
Tockra schrieb:
Kann mir jmd. sagen, ob man eine Version für alle Unix Versionen schreiben kann, oder ob man für den Raspberry Pi z.B. auf einige Bibiliotheken verzichten muss?
Unix wirst du heute sehr wahrscheinlich nirgendwo mehr antreffen (Glaube, OSX ist das einzige gängige zertifizierte Unix heutzutage). Was moderne POSIX-Basierte Betriebssysteme angeht, lautet die Antwort ganz klar: Kommt drauf an.
 
Ich habe damit auch nicht das Unix Betriebssystem an sich gemeint, sondern die abgewandelten Versionen. Auch MACOS ist afaik eine abgewandelte Version davon, genau wie debian, ubuntu und co.

Siehe
2000px-Unix_history-simple.svg.png
 
Liegt weniger an der Programmiersprache als an deinem Verständnis für Logik und Alogrithmen.
Mathe Profis bekommen selbst in Java schnelleres hin als ein Anfänger mit C.

Bevor du dich allerdings mit Effizienz rumschlägst, sieh doch erst mal zu dass dein Downloader überhaupt funktioniert. Danach kannst noch eine zweite Version machen und mal den Speed vergleichen.
Du kannst lediglich voraus planen wie du Funktionen aufbaust, dass du möglichst selten Variablen neu zuweisen musst.

Effizienz ist ein komplexes Thema mit etlichen Tools diese zu analysieren und zu verbesseren.
Das ganze hat praktisch nichts mehr mit Programmieren zu tun als mit theoretischer Informatik, Hardware Verständnis und Mathe. Also der Kram weswegen man Informatik oder noch besser Mathe studieren geht.
 
Zuletzt bearbeitet:
Tockra schrieb:
Kann mir jmd. sagen, ob man eine Version für alle Unix Versionen schreiben kann, oder ob man für den Raspberry Pi z.B. auf einige Bibiliotheken verzichten muss?

Kommt wohl auf die Bibliotheken an. Wenn du den kompletten HTTP-Client selber implementierst (Standard C++ versteht jedes Unix, allerdings sollte es auf betreffender Plattform kompiliert werden), dann könnte das klappen mit eine für alle ;)
Sonst halt Bibliotheken suchen die möglichst verbreitet sind.
 
black90 schrieb:
Liegt weniger an der Programmiersprache als an deinem Verständnis für Logik und Alogrithmen.
Mathe Profis bekommen selbst in Java schnelleres hin als ein Anfänger mit C.

Bevor du dich allerdings mit Effizienz rumschlägst, sieh doch erst mal zu dass dein Downloader überhaupt funktioniert. Danach kannst noch eine zweite Version machen und mal den Speed vergleichen.
Du kannst lediglich voraus planen wie du Funktionen aufbaust, dass du möglichst selten Variablen neu zuweisen musst.

Effizienz ist ein komplexes Thema mit etlichen Tools diese zu analysieren und zu verbesseren.
Das ganze hat praktisch nichts mehr mit Programmieren zu tun als mit theoretischer Informatik, Hardware Verständnis und Mathe. Also der Kram weswegen man Informatik oder noch besser Mathe studieren geht.

Nun ja Java kann vielleicht schnell sein, aber alle Programme die ich damit gesehen habe sind mindestens ziemlich resource lastig. Jetzt kann man natürlich argumentieren, dass die alle von irgendwelchen Anfängern programmiert wurden, aber ich denke dem ist nicht so.

Bsp:
Eclipse (Java) : 300-400 MB Ram im Idle
Visual Studio 2013 (C oder so ): 100-200 mb im Idle
JDownloader 2 (Java) : 200-300 Mb im Idle

Alle 3 Programme habe ich gerade erst gestartet und man sieht schon die Tendenz, dass Java mehr RAM verbraucht. Jetzt kann man natürlich dagegen argumentieren und sagen, dass es 3 komplett unterschiedliche Programme sind, aber die Tendenz geht scheinbar immer in die Richtung, dass ein Java Programm viel RAM verbraucht.
Somit würde ich vielleicht kein etwas komplexeres Programm für einen Raspberry Pi mit Java schreiben. (512mb Ram).

Dass die Geschwindigkeit stark von den benutzten Datenstrukturen und Algorithmen abhängt ist schon klar, aber auch da können die Standartbibiliotheken der entsprechenden Sprachen wichtig sein. Hat z.B. die C++ Bibilithek nur schrottige Container mit schlecht gewählten Algorithmen z.B. O(n^2) Sortieralgorithmen und Java dafür die O(nlogn) Sortieralgorithmen, dann ist ja klar, dass bei richtiger Verwendung Java schneller zu sein scheint. So wird es aber sicher nicht sein. Es wird allerdings kein Programmierer c++ ineffizient programmieren und in java effizient, von daher ist das Können des Programmierers keine ausschlaggebende Eigenschaft für die Wahl der Sprache und somit total belanglos ;)
 
Tockra schrieb:
Dass die Geschwindigkeit stark von den benutzten Datenstrukturen und Algorithmen abhängt ist schon klar, aber auch da können die Standartbibiliotheken der entsprechenden Sprachen wichtig sein. Hat z.B. die C++ Bibilithek nur schrottige Container mit schlecht gewählten Algorithmen z.B. O(n^2) Sortieralgorithmen und Java dafür die O(nlogn) Sortieralgorithmen, dann ist ja klar, dass bei richtiger Verwendung Java schneller zu sein scheint. So wird es aber sicher nicht sein.

Du sagst du lernst gerade C++ und dann so eine Aussage. Welcher Sortieralgorithmus hinter sort() aus der STL verbirgt, ist jeder STL-Implementierung selber überlassen. Oft wird aber z.B. Introsort verwendet, was eben auch Worst-Case O(n log n) hat.
Auch wenn ich z.B. selber die STL-Container so oft nutze, sind sie alles andere als Schrott.
 
Seit 2010 wurde Version 0.5 angekündigt, welche auch schon eine Public Beta hatte, welche nicht mehr online ist.
Bis heute ist die Version nicht released worden, wobei ich mir sagen lassen habe, dass die Version jetzt 1.0 heißen wird. Aber seit 5 Jahren an so ner Version arbeiten und noch nichts draußen haben spricht ja für sich. Außerdem macht mir jedes 2. Update irgendwas kapput und das Programm funktioniert wieder nicht, bis die wieder auf die vorversion zurück gehen -,-


Desweiteren stören mich noch viele Sachen an der Software, die ich gerne mal erwähnen könnte.
Zum einen ist der Windows Client richtig schlecht und buggy, das Loginsystem über das Webpanel funktioniert mal so gar nicht und ich traue mich bei dieser miesen Leistung die Software auch nur über VPN erreichbar zu machen.
 
Also die Möglichkeit besteht natürlich, dass man in C++ einen sparsameren Downloader hinbekommt. Ich persönlich kenne pyload nicht, aber ich stelle es mir etwas wie den jDownloader vor. Von Seiten der Performance wäre es jetzt sicherlich nicht unbedingt schwierig eine besser Lösung zu gestalten. Sehr viel problematischer wird es beim Funktionsumfang. Wie genau willst du die Kommunikation mit dem Server gestalten? Das ist ja schließlich kein FTP-Server, wo alles standartisiert abläuft. Da müsste man für jede Seite eigene Vorgehen schreiben und für jede erst einmal herausfinden, wie man so etwas umsetzen kann. Das alleine stelle ich mir sehr zeitintensiv vor.

Wenn du nur 1-2 Hoster benötigst und nur sehr beschränkt Features benötigst, dann könnte das Ganze aber vielleicht klappen.
 
daemon777 schrieb:
Das ist ja schließlich kein FTP-Server, wo alles standartisiert abläuft. Da müsste man für jede Seite eigene Vorgehen schreiben und für jede erst einmal herausfinden, wie man so etwas umsetzen kann. Das alleine stelle ich mir sehr zeitintensiv vor.
Das FTP Protokoll wird nicht befolgt, da geb ich dir recht, aber jeder Anbieter hat sicher sein eigenes. Da setze ich mich entweder bisschen hin und gucke mit Wireshark, was da für Kommunikation zwischen Browser und Server abgeht, wenn eine Datei angefordert wird und/oder spicke bei pyload mal in den Source rein (ist afaik opensource (hoffentlich)) . Sollte nicht gegen das Urheberrecht verstoßen sich bei einem anderen Projekt über ein Protokoll zu informieren ^^ .

Vielleicht kann man interessante Anbieter auch einfach fragen, da es immer in deren Interesse liegt, wenn der Nutzer komfortabel deren Dienst nutzen kann...
 
Tockra schrieb:
Sollte nicht gegen das Urheberrecht verstoßen sich bei einem anderen Projekt über ein Protokoll zu informieren ^^ .

Aber von der Arbeit anderer Leute zu profitieren, ohne sie zu respektieren, ist ziemlich arschgeigig. Ich bin kein Anwalt und kann dir natürlich keine Rechtsauskunft geben. Trotzdem bin ich der Meinung, es wäre nur Fair, mal mit den Entwicklern darüber zu sprechen, was sie davon halten.
 
asdfman schrieb:
Aber von der Arbeit anderer Leute zu profitieren, ohne sie zu respektieren, ist ziemlich arschgeigig. Ich bin kein Anwalt und kann dir natürlich keine Rechtsauskunft geben. Trotzdem bin ich der Meinung, es wäre nur Fair, mal mit den Entwicklern darüber zu sprechen, was sie davon halten.

Den Quellcode zu nutzen, um sich über das verwendete Protokoll aufzuschlauen, ist auf jeden Fall ok, da das Projekt unter der GPL veröffentlicht wurde. Da muß man gar nicht erst nachfragen. Wenn den Entwicklern so was nicht passen sollte, hätten sie's halt nicht unter der GPL veröffentlichen sollen.
 
antred schrieb:
Dann kann man sich das Fragen in der Tat sparen. Das einzige Problem könnte sein, dass jemand das für ein abgeleitetes Werk halten könnte. Bei Wechsel der Programmiersprache dann allerdings recht schwer zu verteidigen.
 
Zurück
Oben