PHP与Java有能源消耗差异吗?

时间:2009-08-23 15:49:40

标签: java php energy

我听到一个传言,Java消耗的能量比PHP少,并且想知道这是否以及如何实现。我目前在一家公司工作,我们的大多数应用程序都基于PHP。功耗对我们来说从来都不是问题,但我们正在开展更重要的项目。我们喜欢PHP用于网络开发,并且想知道这样的谣言如何传播,以及它是否真实。

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

由于我的一位顾客问我这个问题,我很乐意证明这是真的。

12 个答案:

答案 0 :(得分:29)

计算机在执行Java或PHP时并不特别在意。功耗几乎相同。那么问题就变成了性能问题 - 如果你能用一台服务器提供更多的请求,你将需要更少的服务器并且消耗更少的能量。或者,如果您没有使用网络规模的应用程序,请更快地提供您的请求,并将更多时间用于闲置,从而消耗更少的电量。

鉴于纯Java和纯PHP,Java作为静态类型的JIT语言当然更快。问题是,鉴于团队成员和开发工作可供您使用,您可以加快哪一个。

我认为最好的方法是混合语言,使用现有的基于Java的基础设施工具(如Terracotta)来构建性能关键部分,以及更灵活地构建复杂但不那么繁重的业务和表示逻辑的东西。

答案 1 :(得分:18)

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

有问题的平台具有如此多的可变性,无法呈现任何通用比较。列举一些可变点。

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

我真的怀疑你可以将这么多变量分离成一个有用的指标。最多可以使用相同的硬件选择两个等效的应用程序(注意所有平台的选择)并进行比较。然后改善最坏的情况,直到它成为最好的一个。我认为,适当的测量结果将是每小时瓦特和每秒请求数。

Ants' answer(upvote him)中注意到的是关键点:性能更好的平台总是会更节能,只要有足够的需求,因为它能够用较少的硬件提供相同数量的请求。

但哪个平台表现更好不仅仅取决于语言,取决于上面提到的事情(还有一些)。

答案 2 :(得分:9)

我对这个问题感到惊讶,直到我进行了谷歌搜索,然后转向this。这是一个严重的问题,我不会想到的。

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

像Flex这样的技术可能会将更多的工作转移回客户端,并使他们获得更大比例的电费。

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

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

这是一个多么令人着迷的问题。用多种语言编写应用程序,将它们部署在相同的硬件上并测量功耗不是很有趣吗?我很乐意看到它。

如果你真的疯了,那么除了向你展示应用程序各部分消耗内存和CPU的地方之外,性能监控工具还会向你显示最耗电的地方?

现在我希望我能再次投票。

答案 3 :(得分:4)

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

lesswatts.org has a bit of information on applications power management,以及Linux系统上功耗的其他几个方面。作为旁注,他们似乎使用PHP,因此本身可能有价值:)

他们不断重复您应该使用PowerTOP来确定哪些应用程序造成的功耗最大,您可以从屏幕截图中看到他们正在检查是否从空闲状态唤醒。


大多数情况下,Web服务器处于空闲状态,然后它“服务”了很短的时间,然后它返回等待下一个服务连接。在这方面,PHP对整个过程的贡献很小:只有服务部分。所以我想知道实际基准测试是否是基于Java的特定Web服务器与提供类似页面的Apache / PHP的比较。如果是这种情况,它实际上并不是PHP和Java的公平比较 - 两者中的任何一个被视为服务实际页面通常只有毫秒有效。我认为实际的网络服务器,即选择或轮询连接的网络服务器,是一个可以提供电源的服务器。

答案 4 :(得分:3)

能耗是指瓦特耗电量吗?

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

切换(更改生产/发布平台,学习曲线时间损失,新业务软件成本等)所带来的问题将非常激烈。除非经过严肃的公司特定的业务分析任务及其相应的结果,否则我无法看到做出如此重要的决定。

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

答案 5 :(得分:2)

据我所知,许多大公司在数据中心的资源需求增长方面存在困难。这些包括占地面积和功耗。因此,我完全相信应用程序的合理化,有利于低资源消耗是一种正在采用的策略。

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

如果我们在解释基础,Java和C中实现了针对资源消耗的特定功能优化,那么我们预计需要大多数执行资源。

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

现在只是假设(纯粹假设,我不是说这就是这种情况),用C语言开发比用Java开发更费力,用Java开发比用Basic开发更多。您如何根据资源消耗权衡开发和维护工作?

真的很棘手。如果有人告诉我他们在功耗的基础上转向Java soleley,我真的想知道更多。这样做的成本是多少?盈亏平衡点在哪里? [顺便说一句 - 我几乎完全用Java工作,我很乐意能说“我们赢了,看看我们的力量有多低!”]

答案 6 :(得分:2)

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

例如,将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应用程序,那么您只是在进行服务器调用,这将减少服务器作为渲染工作传递到浏览器。那时JIT for Java应该发挥作用,而Java或Scala我预计会降低功耗。

IMO的一项重要测试是,看看我们是否可以获得与减少机器大小相同的性能,因此,如果您需要3台用于PHP或Java的计算机,那么是负载平衡的,以及1台Scala机器可以有相同的表现,然后scala(使用Lift)将获胜。

答案 7 :(得分:2)

电源效率本身就是一个整体领域。测量性能通常是最好的方法(给定相同的硬件)。如果正在比较不同的硬件,那么这就是整个'其他球赛。

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

还有很多其他考虑因素:

数据中心 考虑将服务器安装在冷却的数据中心中。服务器产生热量,需要移除热量以保护硬件。 A / C单元没有无限的粒度。它们的效率通常伴随着音量。因此,如果我将服务器数量从2减少到1,我可能已经节省了一台服务器的功耗,但冷却成本可能不大。但如果改变我的架构可以让我减少100台服务器......这是一笔很大的节省!

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

<强> Virtualizaton 如果您的应用程序数量很少,将其整合到运行在多核系统上的虚拟机中可能比在最节能的SW堆栈中重写并在独立服务器上运行它可以节省更多的能源。

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

如果您唯一关心的是能源效率,是的,请使用包中的所有工具将您带到那里。但大多数时候,这只是整体方案中的一个小变量,也是您花费最少的成本。

答案 8 :(得分:2)

更高效的代码确实消耗更少的资源,包括电源。 Java通常具有更快,更高效的实现,因此所有其他因素都是不变的,Java可能会消耗更少的能量在服务器上运行。

但所有其他因素不是常数。根据您决定使用PHP或Java,无法确定哪些更改。例如,Java需要更长的时间来开发,这意味着Java程序员可以让他们的计算机打开更长时间,并且他们的电源使用量可能会超过您在服务器上的节省。

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

一个相关的例子是几个月前,当有传言说你可以通过将桌面背景设置为黑色来节省能源。想法是黑色==没有光,所以你没有使用那么多光。谷歌(少数具有足够功率使这种研究生产力的公司之一)进行了一些实验并进行了一些研究,并发现液晶屏无论如何产生白光,并通过在像素中传递第二个电流来过滤它以不同的方式。因此,通过将像素设置为黑色,您可以将其过滤设置为最大值,实际上使用最多的能量。最节能的桌面背景(至少在LCD屏幕上)是白色背景。然而,由于白色背景伤害了人们的眼睛,很少有人将他们的桌面背景设置为白色,而黑色背景节省能量的谣言仍然普遍存在。

因此,长话短说,担心这可能弊大于利。

答案 9 :(得分:1)

这是与哪种语言具有最佳性能相同的问题。现在,几乎所有大多数程序员都接触过的项目。到目前为止,你如何编写系统超过了所使用的技术(假设系统没有问题)。

对于嵌入式系统和科学家来说,性能的语言选择是不可能的。你根据要解决的问题选择语言,很少有cpu效率。

同样,您可以设计和编写决定其效率的系统。

答案 10 :(得分:0)

显然,现代计算技术使用的资源比以往多得多,这直接等同于功耗。一旦我们使用普通的旧套接字通过网络传输二进制数据并且100Mhz处理器将处理它,现在我们有一个软件堆栈,其中数据被转换为XML文本,然后通过http通过http传递给Web服务socket,我们想知道为什么我们需要一个带有spods RAM的3Ghz处理器才能获得不错的性能:)

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

现代编程并不喜欢这样 - 推动程序员的工作效率,使用更便宜的程序员,并一直重新设计代码(即重写代码),因此代码需要易于创建(有时还需要维护)。因此,为了获得最佳效果,您需要权衡这些因素。行业标准的做法只是根据用途混合系统。

目前最终的性能是C / C ++代码,最终的程序员生产力似乎是脚本语言。因此,两者的理想最佳方法是用Python等脚本语言编写主业务逻辑,并用它来调用用C / C ++编写的专用“power helpers”。如果您需要更高的性能,可以在底层的C / C ++中编写更多代码。如果您需要更多RAD快速开发,请使用脚本语言编写更多内容。

我对OP的建议不是用Java重写,它总体上可能表现更好,但是你会付出太多代价,这可能不值得。相反,请抓住应用程序的密集位并尽可能高效地重写它们,并从现有的PHP中调用它们。然后看看您的整体架构,减少对低效协议和数据结构的依赖。例如:如果用JSON替换XML,您会发现您具有相同的功能,但只需要解析和重新格式化数据所需的数据大小和资源的一小部分。

答案 11 :(得分:0)

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

典型的PHP Web应用程序将一个请求的重复工作复制到下一个请求,这仅仅是因为PHP执行环境(或上下文)在请求之间不是持久的。

由于典型的Java Web应用程序 能够直接保持状态,无需额外的步骤或缓存失效,因此不需要执行PHP样式的重复SQL查询为每个请求获取相同的信息。相反,Java Web应用程序通常将当前分析的复杂信息存储在堆上的本机数据结构中,该结构以纳秒为单位,而不是以毫秒为单位。

由于处理器执行这些基本数据访问功能所需的工作量要少得多,因此每单位客户价值所需的功耗更低。