46 Stimmen

PHP vs. Java - gibt es Unterschiede beim Energieverbrauch?

Ich habe das Gerücht gehört, dass Java weniger Energie verbraucht als PHP und frage mich, ob und wie das stimmt. Ich arbeite derzeit in einem Unternehmen, in dem wir die meisten unserer Anwendungen auf PHP basieren. Der Stromverbrauch war für uns nie ein Problem, aber wir arbeiten an größeren Projekten, bei denen das eine Rolle spielen könnte. Wir lieben PHP für die Webentwicklung und fragen uns, wie sich ein solches Gerücht verbreiten kann und ob es überhaupt wahr ist.

Das Beispiel, das ich gehört habe, war, dass Facebook aus genau diesem Grund zu Java wechselt (ich kann diese Informationen bei Google allerdings nicht finden).

Da einer meiner Kunden mir diese Frage stellt, hätte ich gerne einen Beweis dafür, dass es stimmt.

2voto

djna Punkte 53789

Ich weiß, dass viele große Unternehmen Schwierigkeiten haben, den wachsenden Bedarf an Ressourcen in ihren Rechenzentren zu decken. Dazu gehören sowohl der Platzbedarf als auch der Stromverbrauch. Ich kann mir daher gut vorstellen, dass die Rationalisierung von Anwendungen zugunsten eines geringen Ressourcenverbrauchs eine Strategie ist, die verfolgt wird.

Ob die Verwendung von Java, PHP oder einer anderen Implementierungstechnologie ausschlaggebend für den Stromverbrauch ist, ist für mich weniger offensichtlich.

Wenn wir eine bestimmte Funktion zur Optimierung des Ressourcenverbrauchs z. B. in interpretiertem Basic, Java und C implementieren würden, welche Funktion würde dann voraussichtlich die meisten Ausführungsressourcen benötigen?

Ich müsste einige harte Beweise sehen, aber ich könnte glauben, dass eine rein interpretierte Sprache mehr verbrauchen könnte als Java, und sogar mit JIT usw. könnte sie wiederum mehr verbrauchen als C.

Nehmen wir einmal an (rein hypothetisch, ich sage nicht, dass dies der Fall ist), dass es mehr Aufwand bedeutet, in C zu entwickeln als in Java, und mehr Aufwand, in Java zu entwickeln als in Basic. Wie würden Sie den Entwicklungs- und Wartungsaufwand gegen diesen Ressourcenverbrauch abwägen?

Das ist wirklich schwierig. Wenn mir jemand sagen würde, dass er aufgrund des Stromverbrauchs zu Java soleley wechselt, würde ich wirklich mehr wissen wollen. Was sind die Kosten dafür? Wo war der Break-even-Punkt? (Übrigens arbeite ich fast ausschließlich mit Java, ich würde gerne sagen können: "Wir haben gewonnen, seht, wie stromsparend wir sind").

2voto

James Black Punkte 41034

Diese Frage ist schwer zu beantworten, es sei denn, Sie legen, wie bei den Benchmarks erwähnt, einige Vergleichsregeln fest.

So wäre es beispielsweise unfair, einen Java3D-Ego-Shooter mit einer PHP-Webseite zu vergleichen, da Java verlieren würde.

Wenn Sie sich mit Java-Frameworks beschäftigen, sollten Sie diese drei vergleichen: Tomcat + JDK 6 + JSP Apache + PHP Scala + Lift-Framework

Ich habe Scala einbezogen, da es zu Java-Bytecode kompiliert und ich erwarte, dass es in Bezug auf die Leistung am günstigsten ist.

Ich bin mir nicht sicher, was der Gewinner wäre, ich würde auf Scala wetten, aber Sie würden sicherstellen wollen, dass Sie die gleiche Anwendung implementiert haben und dann einfach den Stromverbrauch vergleichen.

PHP wird wahrscheinlich gewinnen, da Apache und PHP anscheinend weniger Speicher benötigen als Java, aber ich kann Scala und PHP nicht wirklich vergleichen.

Die große Unbekannte für mich ist, dass, wenn Sie den gleichen Java-Code aufrufen, dieser bereits in nativen Code umgewandelt wurde und daher schneller läuft, aber JSP sollte vorkompiliert werden, um die Vorteile von Java zu nutzen.

Wenn Sie jedoch Web2.0-Technologien verwenden, ändert sich die Situation, da die meiste Last auf den Browser übertragen wird. Wenn Sie eine große Javascript-Anwendung haben, führen Sie lediglich Serveraufrufe durch, was den Stromverbrauch des Servers verringert, da die Rendering-Arbeit an den Browser weitergegeben wird. An diesem Punkt sollte die JIT für Java ins Spiel kommen, und Java oder Scala würde ich erwarten, dass auf den Stromverbrauch niedriger sein.

Ein großer Test wäre, IMO, zu sehen, ob wir die gleiche Leistung erhalten können, wenn wir die Größe der Maschine reduzieren, also, wenn Sie 3 Computer für PHP oder Java benötigen, die Load Balanced sind, und 1 Scala-Maschine kann die gleiche Leistung haben, dann Scala (mit Lift) wird gewinnen.

2voto

Imagist Punkte 17215

Ein effizienterer Code verbraucht weniger Ressourcen, einschließlich Strom. Java hat im Allgemeinen eine schnellere, effizientere Implementierung, so dass Java bei sonst gleichbleibenden Faktoren auf einem Server wahrscheinlich weniger Energie verbraucht.

Aber alle anderen Faktoren nicht konstant sind . Es ist nicht abzusehen, was sich ändert, wenn Sie sich für PHP oder Java entscheiden. Zum Beispiel dauert die Entwicklung von Java länger, was bedeutet, dass die Java-Programmierer ihre Computer länger laufen lassen und ihr Stromverbrauch dadurch Ihre Einsparungen auf dem Server übersteigen kann.

Wenn Sie Google, Amazon oder ein anderes Unternehmen sind, das jeden Tag buchstäblich Milliarden von Anfragen von Tausenden von Servern bedient, würde ich mir darüber Sorgen machen. Andernfalls ist Ihre Größenordnung nicht groß genug, um positive Aussagen über den Energieverbrauch zu treffen. Daher ist jede Entscheidung, die Sie treffen, genauso wahrscheinlich kontraproduktiv wie produktiv, weil es unmöglich ist, alle relevanten Faktoren zu berücksichtigen.

Ein einschlägiges Beispiel ist das Gerücht, das vor einigen Monaten die Runde machte, man könne Energie sparen, indem man den Hintergrund seines Desktops auf schwarz stellt. Der Gedanke war, dass Schwarz = kein Licht bedeutet und man daher weniger Licht verbraucht. Google (eines der wenigen Unternehmen, die genug Strom verbrauchen, um diese Art von Forschung produktiv zu machen) führte einige Experimente durch und stellte fest, dass LCD-Bildschirme in jedem Fall weißes Licht erzeugen und dieses filtern, indem sie einen zweiten Strom auf andere Weise durch die Pixel leiten. Wenn Sie also ein Pixel auf Schwarz setzen, stellen Sie seine Filterung auf das Maximum ein und verwenden tatsächlich die meisten Energie möglich. Der energiesparendste Desktop-Hintergrund (zumindest auf einem LCD-Bildschirm) ist ein blanco Hintergrund. Da weiße Hintergründe jedoch den Augen schaden, stellen nur wenige Menschen ihre Desktophintergründe auf weiß um, und das Gerücht, dass schwarze Hintergründe Energie sparen, hält sich hartnäckig.

Um es kurz zu machen: Sich darüber Gedanken zu machen, schadet wahrscheinlich mehr, als es nützt.

1voto

Johan Rylander Punkte 35

Dies ist die gleiche Frage wie die, welche Sprache die beste Leistung hat. Nun denn, für so ziemlich jedes Projekt, mit dem die meisten Programmierer jemals in Kontakt kommen. Die Art und Weise, wie man das System schreibt, überwiegt bei weitem die verwendeten Technologien (vorausgesetzt, das System ist gut spezifiziert).

Die Wahl der Sprache in Bezug auf die Leistung ist imho für eingebettete Systeme und Wissenschaftler. Man wählt eine Sprache nach dem zu lösenden Problem aus, extrem selten danach, wie recheneffizient sie ist.

Auch hier kommt es darauf an, wie Sie das System konzipieren und schreiben, um die Effizienz des Systems zu bestimmen.

0voto

gbjbaanb Punkte 50303

Es liegt auf der Hand, dass moderne Computertechniken viel mehr Ressourcen verbrauchen als früher, was sich direkt auf den Stromverbrauch auswirkt. Früher benutzten wir einen einfachen alten Socket, um Binärdaten über das Netzwerk zu übertragen, und ein 100-MHz-Prozessor konnte das erledigen. Heute haben wir einen Software-Stack, bei dem die Daten in XML-Text umgewandelt und dann über einen Webdienst per HTTP über denselben Socket weitergeleitet werden, und wir wundern uns, warum wir einen 3-GHz-Prozessor mit einem Haufen Arbeitsspeicher brauchen, um eine anständige Leistung zu erzielen :)

Das ist also das Problem, und das Einzige, was Sie dagegen tun können, ist, Ihren Code effizienter zu gestalten. In der Regel bedeutet dies die Verwendung einer niedrigeren Programmiersprache und eine geringere Abhängigkeit von Allzweck-Frameworks oder -Bibliotheken. Versuchen Sie auf keinen Fall, Software-Stacks übereinander zu schichten, wenn Sie nicht anders können.

Die moderne Programmierung mag das nicht - sie drängt auf die Produktivität der Programmierer, stellt billigere Programmierer ein und überarbeitet den Code ständig (d.h. schreibt ihn neu), so dass der Code leicht zu erstellen (und manchmal auch zu pflegen) sein muss. Um das Beste herauszuholen, müssen Sie daher diese Faktoren gegeneinander abwägen. Die branchenübliche Vorgehensweise besteht darin, die Systeme entsprechend ihrer Verwendung zu mischen.

Derzeit ist die ultimative Leistung C/C++-Code, und die ultimative Produktivität der Programmierer scheint Skriptsprachen zu sein. Die ideale Kombination aus beidem besteht also darin, die Hauptgeschäftslogik in einer Skriptsprache wie Python zu schreiben und diese zum Aufrufen spezieller, in C/C++ geschriebener "Power Helpers" zu verwenden. Wenn Sie mehr Leistung benötigen, können Sie einen größeren Teil Ihres Codes in der zugrunde liegenden Sprache C/C++ schreiben. Wenn Sie eine schnellere RAD-Entwicklung benötigen, schreiben Sie mehr in der Skriptsprache.

Mein Rat an den Auftraggeber ist, nicht in Java umzuschreiben. Es mag insgesamt leistungsfähiger sein, aber die Kosten sind so hoch, dass es sich nicht lohnt. Nehmen Sie stattdessen die intensiven Teile Ihrer Anwendung und schreiben Sie diese so effizient wie möglich um und rufen Sie sie von Ihrem bestehenden PHP aus auf. Ein Beispiel: Wenn Sie XML durch JSON ersetzen, werden Sie feststellen, dass Sie dieselbe Funktionalität haben, aber nur einen Bruchteil der Datengröße und der für das Parsen und Umformatieren der Daten erforderlichen Ressourcen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X