Software-Inflation in Bezug auf Prozessorressourcen - warum sind neuere Versionen der Anwendung manchmal viel langsamer als ältere?

Auftakt


Es war ein regulärer Donnerstagabend. Ich kehrte von der Arbeit zurück, setzte mich an den Laptop, schaltete ihn ein, startete Skype und wartete gewöhnlich darauf, dass er endlich vollständig und vollständig hochfuhr. Und dann dachte ich plötzlich: Warum hat das Laden so lange gedauert, und selbst das System ist eindeutig schwer zu ertragen?

Ich habe mich entschlossen, in den Task-Manager zu schauen, um zu schätzen, wie viel Ressourcen Skype im Hintergrund verbraucht. Aber zuerst ein paar vorläufige Berechnungen. Und wie viel sollte dies Ressourcen verbrauchen? Ich spreche jetzt über den Hintergrund. Jene. Wenn keine Videoverbindung besteht, spreche ich mit niemandem mit dem Mikrofon. Alles, was ist, ist eine Liste von Kontakten, die in Form von Symbolen und Namen angezeigt wird, und ein Menü, in dem Sie etwas auswählen können.

Jene. Dies ist in der Tat eine Form, über die Sie zusätzliche Menüs starten können. Auf diesem Formular befindet sich eine Liste. Und ein Textfeld zum Eingeben von Nachrichten an jemanden, ein paar Schaltflächen. Vor ungefähr 15 Jahren, als ich in Delphi schrieb, würde eine solche Anwendung (mit einer Form) ein paar hundert Kilobyte wiegen. Seitdem die Entwicklungsumgebung viel mehr Ressourcen verbraucht, sind die visuellen Komponenten natürlich umfangreicher geworden. Trotz dieses Fortschritts sollte Skype im Hintergrund maximal etwa 10 Megabyte wiegen. Schließlich spreche ich nicht mit jemandem oder rufe ihn an. Wofür kann ich sonst noch so viel ausgeben?

Sie können sich diese Angelegenheit und andererseits, wie Mathematiker sagen, die Äquivalenz ansehen. Ohne Videoanrufe und Mikrofongespräche bietet Skype die Möglichkeit, zu sehen, welcher der Gesprächspartner derzeit im Netzwerk ist, ihm eine Textnachricht zu senden und eine Textnachricht als Antwort von jemandem zu erhalten. Jene. Es handelt sich im Wesentlichen um ICQ. Sollte Skype also wahrscheinlich im Hintergrund ungefähr so ​​viel wie ICQ im Speicher beanspruchen? Lassen Sie uns nun diese Berechnungen in der Praxis überprüfen. Wir betrachten den Speicherverbrauch im TaskManager:

Bild

Nimmt Skype 158 MB Speicherplatz ein? Nehmen Sie es ernst, wenn man bedenkt, dass QIP 35 MB beträgt? Okay, 35 MB sind wahrscheinlich zu viel, und das sollte geklärt werden, aber in meiner Notiz geht es nicht darum. Wir sind jetzt über Skype. Warum nimmt es so viele Ressourcen in Anspruch - fast fünfmal mehr als QIP? Es ist ein bisschen zu viel für ein Formular mit einer Liste von Kontakten, nicht wahr?

Interessanterweise betrifft mich dieses Problem nicht nur, wenn Sie in Google " Warum verbraucht Skype so viel Speicher " fahren, dann wird in den Foren nur ein Fußtuch verschiedener Diskussionen herausfallen , warum neue Versionen von Skype so viel wiegen. Die Antworten sind besonders erfreulich. Zum Beispiel eine echte Antwort im Skype-Community-Forum (ich zitiere meine kostenlose Übersetzung der Antwort):

, ? 4-8 . 140 , .


Ja, ja. Na sicher. Wenn dies der Fall ist, werden alle Softwareentwickler argumentieren , dass " keine Volosts nicht ausreichen ". Die Frage ist nicht, dass mir der Skype-Speicher leid tut (und es tut mir auch leid). Die Frage ist, was ist so neu in der Funktionalität, die in neuen Versionen von Skype hinzugefügt wurde (im Vergleich zu alten), dass sie so viel Speicher benötigen?

Aber das ist okay. Ich war mehr an einer anderen Frage interessiert - der Prozessor mit Skype im Hintergrund entspannte sich auch nicht wirklich und zeigte regelmäßig sogar eine volle Ladung. Es stellt sich die Frage: "Warum und wie kann man das loswerden?". Tatsächlich sollte die Frage so klingen: Wie schaffen es Entwickler, solche sperrigen Anwendungen zu erstellen? Und was soll man damit machen?

Ein bisschen Geschichte


Natürlich hat jeder Besucher dieser Website wahrscheinlich mindestens einmal von Moores Gesetz zur Verbesserung der Systemleistung gehört. Der Artikel Free Lunch is Over bietet ein so merkwürdiges Bild:

Bild

Wie Sie sehen, erreichten die Prozessoren irgendwo im Jahr 2004 die Obergrenze in Bezug auf die Taktfrequenz. Und in den letzten 10 Jahren nimmt diese Häufigkeit nicht besonders zu. Folgt daraus, dass Moores Gesetz nicht mehr erfüllt ist? Eigentlich nein, und der Artikel erklärt klar und deutlich, warum. Die Leistung unserer Computer steigt jetzt aufgrund anderer Faktoren (Cache und Multicore). Der Haken ist jedoch, dass normale Single-Threaded-Anwendungen diese Faktoren nicht beschleunigen können. Und hier ist das Problem. Tatsache ist, dass sich viele Softwarehersteller heutzutage so verhalten, als ob die Werft noch in den 80ern oder 90ern liegt, und die Optimierung der Software hinsichtlich der Reduzierung der Anzahl der Taktzyklen kein besonderes Problem darstellt - Sie können nur ein wenig warten, und die Prozessoren werden es tun viel schneller.

Dies gilt nicht nur für Microsoft, sondern ich werde mich auf bestimmte Beispiele konzentrieren. Joel Spolsky erwähnt in seinem Artikel , dass Microsoft es in den 80er Jahren geschafft hat, sich im Kampf zwischen Excel und 123 gegen Lotus durchzusetzen, da Lotus-Manager einen kritischen Fehler gemacht haben - sie haben versucht, die Anwendung zu optimieren . Insbesondere haben sie versucht, die Anwendung so zu verkleinern, dass sie immer in 640 KB RAM passt. Sie haben es anderthalb Jahre lang getötet, und während dieser Zeit eroberte Redmond den Markt mit Excel, weil zu diesem Zeitpunkt Computer mit viel mehr RAM in Betrieb waren. Diese Lösung hat Lotus viel gekostet.

Hier ist jedoch das Interessante - heutzutage könnte sich eine solche Strategie möglicherweise als Gewinn herausstellen -, da die Ressourcen von Standard-Desktop-Systemen nicht mehr so ​​erstaunlich wachsen wie vor 20 bis 30 Jahren. Das Problem ist, dass aufgrund des harten Wettbewerbs dieser Zeit die Unternehmen, die die Funktionalität der Anwendungen entwickelten, die Gewinner waren, während sie die Leistung und Optimierung ignorierten. Es sind diese Unternehmen, die diese Entwicklungsideologie geformt haben, deren Früchte wir immer noch ernten.

Inflation


Was hat das gebracht? Zu einem sehr merkwürdigen Phänomen. Ich werde niemals auf Hardware-Upgrades verzichten, aber plötzlich habe ich vor kurzem begonnen, Software-Upgrades aufgrund einer möglichen Inflation unnötig zu vermeiden . Mit diesem Begriff meine ich, dass ich den gleichen Funktionsumfang, den ich in der alten und in der neuen Version hatte, zu einem günstigen Preis in Bezug auf Prozessorressourcen und RAM bekomme.

Es gibt eine feste Sprache auf Englisch, die auf Russisch so klingt, als würde man versuchen, etwas zu reparieren, das nicht kaputt ist. Die Situation mit Software in den letzten 10 Jahren erinnert sehr an diese Redewendung. Skype ist eines der besten Beispiele dafür. Den Foren nach zu urteilen, gab es dieses Speicherproblem in älteren Skype-Versionen nicht, beispielsweise in Version 3.x. Was wurde an dem Produkt seitdem verbessert, dass es in Bezug auf RAM so teuer geworden ist?

Gleiches gilt übrigens für verschiedene Chat-Anwendungen. Vor ungefähr 15 Jahren sah Chat, der jeweils 30 MB RAM beansprucht, wie Unsinn aus. Dies ist jedoch jetzt bereits die Norm, obwohl was bieten uns die aktuellen Chatrooms, die zu diesem Zeitpunkt noch nicht bereitgestellt wurden?

Vergessen Sie nicht Microsoft Office. Meiner Meinung nach hat die Version für XP alle zufrieden gestellt. Natürlich hatte es wie jedes Produkt seine Nachteile. Aber waren sie so kritisch, dass sie die Versionen 2007, 2010 usw. veröffentlichen mussten? Ich mache die gleichen Dokumente darin, aber jetzt muss ich viel länger warten, bis diese Systeme hochfahren.

Zur Rechtfertigung hören wir, dass neue Versionen neue Funktionen enthalten. Ja, ich leugne es nicht, aber scheint es nicht seltsam, dass alte Gelegenheiten dabei mehr Ressourcen erfordern?

Modularität und Optimierung


Warum immer noch mehr Ressourcen? Hier erklärt sich alles dadurch, dass die meisten Anwendungen eher monolithisch sind. Nein, in Bezug auf die Organisation des Codes sind sie wahrscheinlich in Module mit der richtigen Aufteilung der Verantwortung unterteilt. Ich nenne sie jedoch monolithisch in dem Sinne, dass beim Laden einer Anwendung normalerweise alle Module sofort geladen werden, obwohl dies häufig nicht erforderlich ist.

Wir werden wieder zu Skype zurückkehren. Jetzt ist es offensichtlich so gemacht, dass mit einem einfachen Login viele Module sofort in den RAM geladen werden, die direkt für Ton, Video usw. verantwortlich sind. Dies trotz der Tatsache, dass die übliche Eingabe nur eine Liste von Benutzern und die Fähigkeit zum Austausch von Text erfordert. Dieses System könnte anders ausgeführt werden und nur das Notwendigste laden. Und nur wenn der Benutzer wirklich einen Videoaustausch starten möchte, wird alles andere geladen.

Die Optimierung ist auch wichtig, da Entwickler physisch nicht in der Lage sind, den gesamten Code von Grund auf neu zu entwickeln, sondern vorhandene Bibliotheken verwenden müssen, die ohne großen Optimierungsdruck geschrieben wurden.

Stellen Sie sich vor, der Entwickler jeder Bibliothek hat seine Bibliothek um 5% langsamer gemacht, als es hätte sein können, wenn er zusätzliche Anstrengungen zur Optimierung unternommen hätte. Lassen Sie Bibliothek 1 Bibliothek 2 in ihrer Arbeit verwenden, und diese Bibliothek 3 und diese Bibliothek 4. In diesem Fall erhält eine Kette von 15 Bibliotheken im Fall der Akkumulation von Verzögerungen das Ergebnis 1,05 ^ 15 = 2,07, d.h. Im schlimmsten Fall wird die Anwendung doppelt so langsam ausgeführt wie eine der Komponenten.

Ich kenne den Satz, dass vorzeitige Optimierung die Wurzel allen Übels ist. Dies ist jedoch eine vorzeitige Optimierung, überhaupt keine Optimierung. Dieser Slogan war wunderbar zu einer Zeit, als Prozessoren vor unseren Augen immer schneller wurden. Nach Erreichen der Obergrenze beginnt sich dieser Slogan seitwärts zu drehen, als die alte Version der Anwendung, die vor etwa 15 Jahren geschrieben wurde, plötzlich bevorzugter aussieht als die letzte Woche veröffentlichte Version. Übrigens kann man nicht übersehen, dass Softwarehersteller häufig versuchen, Benutzer zur Aktualisierung von Software zu zwingen, gerade weil es in diesem Fall keine besonderen Motive zum Nutzen für den Verbraucher gibt.

Alternative Beispiele


Grundsätzlich erwartet die Softwareindustrie nach der Ölkrise der 70er Jahre dasselbe wie die Automobilindustrie, als klar wurde, dass Benzin zu einer kritisch teuren Ressource wird. Seitdem konnten die Automobilhersteller den Motorverbrauch um etwa ein Drittel senken, wenn ich mich nicht irre.

In der Welt der Software gibt es auch solche Beispiele. Zu einer Zeit mochte ich Erlang sehr, das auf dem Konzept vieler unabhängiger Lightweight-Prozesse basiert, die nur durch gemeinsame Nachrichten verbunden sind (dies ermöglicht es Ihnen, die Verwendung von Multicore zu maximieren). Darüber hinaus gibt es in dieser Umgebung ein Prinzip, das explizit von den LISP-Interpreten übernommen wurde: Jedes Modul und jede Funktion kann bei Bedarf unterwegs geladen und neu geladen werden (und das gilt auch für jeden Prozess).

Zum Vergleich müssen Sie bei Glassfish, wenn Sie eine von mehreren hundert oder Tausenden von Klassen geändert haben, das gesamte Modul (Krieg / Ohr / Glas) neu installieren. Hot-Swapping von Funktionen oder Klassen für unterwegs ist vorhanden, aber im Vergleich zu Erlang sehr schlecht implementiert.

Die Zukunft der Branche liegt in Anwendungen, die die Multi-Core-Technologie vollständig nutzen können und nicht sofort alle möglichen Module für alle Funktionen dieses Produkts herunterladen. Jene. Das Programm kann in der Grundkonfiguration laden und so viele Ressourcen verbrauchen wie sein Vorgänger vor 15 Jahren. Falls erforderlich, können Sie alles herunterladen, was der Benutzer unterwegs benötigt.

All Articles