PHP与Java有能耗差异吗?

我听到一个谣言,说Java比PHP消耗更less的能量,并想知道这是否会和如何这将是事实。 我目前正在一家公司,我们的大部分应用程序都基于PHP。 电力消耗对我们来说从来都不是问题,但我们正在研究更重要的项目。 我们喜欢PHP的网页开发,并想知道这样的谣言如何传播,如果是真的。

我听说的例子是,Facebook正在切换到Java的原因(我似乎无法在谷歌上find任何这些东西)。

由于我的一个客户问我这个问题,我很想certificate这是真的。

如果他们正在执行Java或PHP,电脑并不特别在意。 功耗几乎相同。 这个问题就成了一个性能问题 – 如果你可以用一台服务器提供更多的请求,你将需要更less的服务器,并且消耗更less的电力。 或者,如果您不在networking规模的应用程序中,更快地为您的请求提供服务,并将更多时间闲置,从而降低功耗。

鉴于纯Java和纯PHP,Java作为静态types的JIT语言当然更快。 问题在于,考虑到团队成员和开发人员的努力,您可以更快地完成这个任务。

我认为最好的方法是混合使用语言,使用现有的基于Java的基础架构工具(如Terracotta)来构build性能关键部分,并使用更灵活的方法来构build复杂但不重要的业务和表示逻辑。

我真的很怀疑这是一个语言问题。

所讨论的平台具有如此多的可变性以使任何通用的比较模拟。 举几个变异点。

  • Java的Servlet容器(Tomcat,Glassfish,Websphere,Jetty,…)
  • PHP的Web服务器(Apache,IIS,lighttpd,nginx,…)
  • PHP的操作码caching
  • 使用的库和框架工具
  • 操作系统
  • 涉及的硬盘
  • 冷却
  • 应用程序本身的algorithm

我真的怀疑你可以把这么多的variables分解成一个有用的指标。 最多可以使用相同的硬件select两个等效的应用程序(注意所有平台的select)并进行比较。 然后提高最差,直到最好的一个。 我想,正确的衡量标准是每小时瓦特数和每秒请求数。

但ant的回答 (注意他)的关键点在于: 在有足够需求的情况下性能更好的平台将总是更具能源效率 ,因为它能够以更less的硬件提供相同数量的请求。

但是哪个平台更好的performance不仅仅取决于语言,取决于上面提到的东西(还有更多)。

我对这个问题感到惊讶,直到我做了谷歌search,这反过来。 这是一个严重的问题,我不会想到的。

现在我正在考虑这个问题,我认为这是谁支付电费的问题。 Sun的Java战略是关于销售服务器的:后面是大铁,前端是瘦客户机。

也许像Flex这样的技术可以将更多的工作转移回客户端,并为他们留下更多的电费。

但是,我很惊讶地看到,能源使用的语言排名。

一个非常有趣的问题。 我正在投票。

多么迷人的问题。 用多种语言编写应用程序,将它们部署在相同的硬件上,并测量功耗,会不会很有趣? 我很想看到它。

如果你真的疯了,一个性能监控工具怎么样,除了向你展示你的应用程序的每个部分所消耗的内存和CPU的数量之外,还会告诉你哪里能耗最高?

现在我希望我能再次投票提出这个问题。

就像许多比较性的问题一样,你可能需要拿出一个基准来真正确定这是否是真实的。

lesswatts.org有一些关于应用程序电源pipe理的信息 ,还有一些Linux系统的功耗方面的信息。 作为一个方面说明,他们似乎使用PHP,所以这可能是值得的东西本身:)

他们不停地重复,你应该使用PowerTOP来确定哪些应用程序造成最大的功耗,并且从截图中可以看出,他们至less从空闲中检查唤醒。


大多数情况下,Web服务器处于闲置状态,然后在一段时间内“服务”,然后又回到等待下一个连接服务。 在这方面,PHP对整个过程贡献很小:只有服务部分。 所以我想知道实际的基准是一个特定的基于Java的Web服务器与服务类似页面的Apache / PHP的比较。 如果是这样的话,那么PHP和Java并不是一个公平的比较 – 通常情况下,被认为服务于实际页面的两​​者中的任何一个都只能以毫秒为单位活动。 我认为实际的networking服务器,即select或者轮询连接的服务器,就是那个会占用电源的networking服务器。

按能耗你是指瓦特的功耗?

我不是100%确定的,但即使这是真的,我认为这类似于优化你的代码的一部分,它是在你的程序的运行时间的0.01%执行。

由交换(改变生产/发布平台,学习曲线时间损失,新的商业软件成本等)将会造成的问题将非常激烈。 除了经过认真的,特定于公司的业务分析任务以及相应的结果之外,我看不出有这么重要的决定。

但是,这应该是一个有趣的讨论。

据我所知,很多大公司在数据中心的资源需求增长方面遇到困难。 这些包括占地面积和功耗。 所以我可以相信,合理化的应用,有利于低资源消耗是一个正在采取的战略。

Java,PHP或其他实现技术的使用是否可能是功耗的决定因素对我来说是不太明显的。

如果我们实现了一个特定的function优化的资源消耗,例如,解释基本,Java和C,我们希望最需要执行资源。

我需要看到一些确凿的证据,但是我可以相信纯粹的解释语言可能会消耗更多,Java甚至与JIT等等,反过来可能会消耗更多的C。

现在假设(纯粹假设,我不是这么说的),在C中开发比在Java中更加努力,而在Java中开发比在Basic中更加努力。 你如何对付这种资源消耗的开发和维护工作?

真的很难做到。 如果有人告诉我他们正在以耗电为基础转向爪哇,我真的想知道更多。 这样做的成本是多less? 盈亏平衡点在哪里? [顺便说一句 – 我几乎全是Java的工作,我很乐意能够说“我们赢了,看我们是多么的低功率!”]

这是一个难以回答的问题,除非像提到的基准一样,你设定了一些比较规则。

例如,比较Java3D第一人称射击游戏和PHP网页将是不公平的,因为Java将会失败。

如果你看看Java框架,那么你可能需要比较这三个:Tomcat + JDK 6 + JSP Apache + PHP Scala + Lift框架

我把Scala编译成java字节码,我期望它对电源来说是最便宜的。

我不确定什么是赢家,我敢打赌Scala,但是你会想确保你有相同的应用程序执行,然后只是比较功耗。

PHP可能会赢得作为Apache和PHP的内存使用似乎比Java低,但我不能真正比较Scala和PHP。

我不知道的是,如果调用相同的java代码,那么它已经变成了本地代码,所以运行速度会更快,但是应该预编译JSP来利用Java。

但是,如果您使用Web2.0技术,那么它会发生变化,因为您将大部分负载放在浏览器上,如果您有一个大的JavaScript应用程序,那么您只是进行服务器调用,这将减less服务器上的电源使用渲染工作被传递到浏览器。 在这一点上,JIT for Java应该起作用,Java或Scala我希望在功耗上更低。

一个大的testing,IMO,将是看我们是否可以得到相同的性能,因为我们减less机器的大小,所以,如果你需要3台电脑的PHP或Java,负载均衡,1台Scala机器可以有同样的performance,那么scala(使用Lift)就会胜出。

电源效率本身就是一个完整的领域。 衡量性能通常是最好的方法(给定相同的硬件)。 如果不同的硬件被比较,那么这是一个整体“另一个球游戏。

因此,如果硬件相同,如果一个软件堆栈比另一个软件堆栈的性能更好,那么这意味着性能更好的软件堆栈将比“按请求”使用更less的功率。 如果性能差异足以让您将服务器整合到更less的地方,那么这是一个更大的胜利!

还有很多其他的考虑因素:

数据中心考虑服务器安装在冷却的数据中心。 服务器产生热量,热量需要被移除以保护硬件。 A / C单位没有无限的粒度。 他们的效率通常伴随着音量。 所以如果我把服务器的数量从2个减less到1个,我可能节省了一个服务器的功耗,但是可能冷却成本并不高。 但是如果改变我的架构,我可以削减100台服务器……这是很大的节约!

硬件和外围设备使用最高能效的软件堆栈并在奔腾4服务器上运行=愚蠢;)最节能的软件无法弥补效率低下的硬件。 这里有一个有趣的教训是:“让硬件人担心电源”。 您担心将您的应用程序推向市场。 当您的应用程序可以产生收入时,您可以随时购买最新的16核Core 5六分之一CPU,并立即获得能源效率;)

Virtualizaton如果您的应用程序体积较小,将其整合到运行在多核系统上的虚拟机上可能会比在最节能的SW堆栈中重写并在独立服务器上运行它更节省成本。

程序员时间您需要熟悉“最节能”软件堆栈的程序员。 你必须考虑如果这是正确的工具。 程序员使用计算机来开发软件,他们需要更多的时间来开发(如果他们受限于错误的工具),消耗的功率就越多。 更何况你将不得不支付他们更多的小时。 这通常会覆盖任何能源消耗问题,因为这里的成本要高得多。

如果你唯一的担心是能源效率,是的,使用袋子里的所有工具,让你在那里。 但是大多数情况下,这只是整体scheme中的一个小variables,也是您成本最低的一个variables。

更高效的代码消耗更less的资源,包括电力。 一般来说,Java具有更快,更高效的实现,所有其他因素都是不变的,Java可能会在服务器上消耗更less的能量。

但所有其他因素都不是恒定的 。 根据您决定使用PHP或Java,不知道发生了什么变化。 例如,Java需要花费更长的时间来开发,这意味着Java程序员的计算机开启时间更长,并且由此耗费的功耗可能超过您在服务器上的节省。

如果你是谷歌,亚马逊或其他公司每天从数千台服务器提供数十亿次请求,我会担心这一点。 否则,你的规模还不足以对能源消费做出任何积极的主张,所以你做出的任何决定都可能会适得其反,因为它是有生产力的,因为不可能包括所有的相关因素。

一个相关的例子是几个月前,当一个谣言四处传播,你可以通过将桌面背景设置为黑色来节省能源。 这个想法是,黑==没有光,所以你没有使用太多的光。 谷歌(为数不多的拥有足够的电力使用这种研究成果的公司之一)进行了一些实验并进行了一些研究,发现无论如何,液晶显示屏都会产生白光,并通过在像素中传递第二种电stream以不同的方式。 因此,通过将像素设置为黑色,可以将其过滤设置为最大,实际上可以使用最多的能量。 最节能的桌面背景(至less在液晶屏上)是白色的背景。 然而,由于白色背景伤害了人们的眼睛,很less有人将桌面背景设置为白色,黑色背景节能的传言依然盛行。

所以,长话短说,担心这可能会造成更多的伤害,而不是好的。

这是与哪种语言具有最佳性能相同的问题。 现在,几乎所有程序员都可以接触到的项目。 如何编写系统远远超过所使用的技术(假定系统configuration正常)。

对于embedded式系统和科学家来说,语言和performance的select是非常重要的。 你根据什么问题来select语言来解决,对于CPU的效率来说,很less见。

同样,devise和编写决定系统效率的系统也是如此。

显然,现代计算技术比以前使用更多的资源,这直接等同于功耗。 一旦我们使用一个普通的旧套接字通过networking传输二进制数据,一个100Mhz的处理器就可以处理它,现在我们有一个软件堆栈,数据被转换成XML文本,然后通过一个Web服务通过httpsockets,我们想知道为什么我们需要一个3Ghz的处理器与RAM的内存获得体面的performance:)

所以这就是问题,你唯一能做的就是让代码更有效率。 通常这意味着使用较低级别的语言,而较less依赖于通用框架或库。 如果你不能帮助,绝对不要试图分层软件堆栈。

现代编程并不喜欢这样的方式 – 推动程序员的工作效率,使用更便宜的程序员,并且随时重新编写代码(即重写代码),因此代码需要易于创build(有时需要维护)。 因此,为了获得最佳效果,您需要权衡这些因素。 这样做的行业标准方法是简单地根据其使用混合系统。

目前最终的性能是C / C ++代码,最终的程序员生产力似乎是脚本语言。 所以,两者最理想的做法是用Python这样的脚本语言编写主要的业务逻辑,然后用它来调用用C / C ++编写的专门的“助手”。 如果你需要更多的性能,你可以在底层的C / C ++中编写更多的代码。 如果您需要更多RAD快速开发,请使用脚本语言编写更多内容。

我对OP的build议并不是用Java重写,它可能是更好的整体performance,但是你将花费太多,这可能是不值得的。 取而代之的是,尽可能高效地重写应用程序的密集部分,并从现有的PHP中调用它们。 然后看看您的整体架构,减less对低效协议和数据结构的依赖。 例如:如果用JSONreplaceXML,则会发现您具有相同的function,但只是parsing和重新格式化数据所需的数据大小和资源的一小部分。

虽然这个问题的许多方面已经在这里深入探讨,但至less还有一点需要研究。

一个典型的PHP Web应用程序从一个请求到下一个请求重复了很多工作,只是因为PHP执行环境(或上下文)不是跨请求持久化的。

由于典型的Java Web应用程序具有直接保持状态的能力,无需额外的步骤或高速caching失效,因此不需要执行PHP风格的重复SQL查询来为每个请求获取相同的信息。 相反,Java Web应用程序通常会将当前分析的复杂信息存储在堆上的本机数据结构中,而在毫微秒中则以纳秒访问。

由于处理器不得不执行这些基本的数据访问function,所以工作需要更less的功率,而单位的客户价值则需要更less的功率。

Interesting Posts