代码之家  ›  专栏  ›  技术社区  ›  Thomaschaaf

PHP与Java的能耗有区别吗?

  •  45
  • Thomaschaaf  · 技术社区  · 15 年前

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

    因为我的一个顾客问我这个问题,如果是真的,我希望能有证据。

    12 回复  |  直到 11 年前
        1
  •  29
  •   Ants Aasma    15 年前

    计算机并不特别关心它们是在执行Java还是PHP。耗电量差不多。然后问题就变成了性能问题——如果你能用一台服务器处理更多的请求,你将需要更少的服务器,消耗更少的电力。或者,如果您不做web规模的应用程序,请更快地满足您的请求,并花费更多的时间空闲,这将消耗更少的能量。

    考虑到纯Java和纯PHP,Java作为一种静态类型的JIT语言当然更快。问题是,考虑到团队成员和开发工作,您可以更快地开发哪一个。

        2
  •  19
  •   Community TheSoundDefense    7 年前

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

    所讨论的平台具有如此多的可变性,使得任何通用的比较都没有意义。举几个变化点。

    • Java的Servlet容器(Tomcat、Glassfish、Websphere、Jetty…)
    • 用于PHP的Web服务器(Apache、IIS、lighttpd、nginx等)
    • 使用的库和框架
    • 涉及硬盘
    • 冷却

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

    注意到了什么 Ants' answer 如果有足够的需求,性能更好的平台将始终更节能

    但是,哪个平台的性能更好不仅取决于语言,还取决于上面提到的事情(以及更多的事情)。

        3
  •  8
  •   duffymo    15 年前

    this 起来。这是一个严重的问题,一个我不会想到的问题。

    也许像Flex这样的技术会把更多的工作交给客户,让他们承担更大比例的电费。

    但我会惊讶地看到一个按能源使用的语言排名。

    一个非常有趣的问题。我要投赞成票。

    现在我希望我能再次投票表决这个问题。

        4
  •  4
  •   Mark Rushakoff    15 年前

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

    lesswatts.org has a bit of information on applications power management 以及Linux系统上的其他几个功耗方面。顺便说一句,他们似乎在使用PHP,所以这本身可能有价值:)

    他们不断重复你应该使用 PowerTOP 要确定哪些应用程序导致了最大的功耗,您可以从屏幕截图中看到,它们至少正在从空闲状态检查唤醒。


    大多数情况下,web服务器都处于空闲状态,然后它“服务”了很短的时间,然后又回到等待下一个连接服务的状态。在这方面,PHP对整个过程的贡献很小:只有服务部分。因此,我想知道实际的基准测试是否是基于Java的web服务器与提供类似页面的Apache/PHP的比较。如果是这样的话,这并不是对PHP和Java的公平比较——这两种服务于实际页面的方法中的任何一种,通常一次只能激活毫秒。我认为实际的web服务器,即选择或轮询连接的服务器,将占用大量的能量。

        5
  •  3
  •   Dimitar Dimitrov    15 年前

    你说的能耗是指瓦特的能耗吗?

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

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

        6
  •  2
  •   djna    15 年前

    据我所知,许多大公司在其数据中心的资源需求增长方面存在困难。包括占地面积和耗电量。因此,我完全可以相信,应用程序的合理化、支持低资源消耗是正在采取的一项战略。

    如果我们在解释的Basic、Java和C中实现了一个特定的优化资源消耗的函数,那么我们将需要大部分的执行资源。

    我需要看到一些确凿的证据,但我可以相信,一个纯解释语言可能会消耗比Java更多的资源,甚至在使用JIT等时也会消耗比C更多的资源。

    很难做到。如果有人告诉我,他们是因为电力消耗而搬到爪哇索莱利的,我真的想知道更多。这样做的成本是多少?盈亏平衡点在哪里?[顺便说一句,我几乎只在Java工作,我很想说“我们赢了,看看我们的能力有多低!”]

        7
  •  2
  •   James Black    15 年前

    这是一个很难回答的问题,除非您设置了一些比较规则,正如关于基准测试所提到的那样。

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

    Tomcat+JDK 6+JSP Scala+Lift框架

    我不确定谁会是赢家,我打赌是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)将获胜。

        8
  •  2
  •   tchen    15 年前

    电力效率本身就是一个完整的领域。测量性能通常是最好的方法(给定相同的硬件)。如果要比较不同的硬件,那就完全是另一个游戏了。

    因此,在相同的硬件条件下,如果一个软件栈可以比另一个软件栈执行得更好,那么这意味着性能更好的软件栈将比另一个软件栈使用更少的“每次请求”功耗。如果性能差异足够大,您可以将服务器整合为更少的服务器,那么这将是一个更大的胜利!

    还有很多其他的考虑:

    假设服务器位于冷却的数据中心中。服务器产生热量,需要移除热量以保护硬件。A/C单元没有无限粒度。它们的效率通常与体积有关。因此,如果我将服务器数量从2个减少到1个,我可能节省了一台服务器的功耗,但在冷却成本方面可能不会太高。但是如果改变我的架构可以让我减少100台服务器。。。这是很大的储蓄!

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

    虚拟化 如果您的应用程序是低容量的,那么将其整合到运行在多核系统上的虚拟机中可能会比在最节能的软件堆栈中重写并在独立服务器上运行它节省更多的能源。

    编程器时间 你需要熟悉“最节能”软件堆栈的程序员。你必须考虑这是否是正确的工具。程序员使用计算机开发软件,他们需要开发的时间越多(如果他们被限制在错误的工具上),消耗的能量就越多。更不用说你还要付他们更多的时间。这通常会消除任何能源消耗的顾虑,因为这里的成本要高很多。

        9
  •  2
  •   Imagist    15 年前

    更高效的代码消耗更少的资源,包括能量。Java通常有一个更快、更高效的实现,所以所有其他因素不变,Java在服务器上运行时可能会消耗更少的能量。

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

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

    所以,长话短说,担心这件事可能弊大于利。

        10
  •  1
  •   Johan Rylander    15 年前

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

    同样,决定系统效率的是你如何设计和编写系统。

        11
  •  0
  •   gbjbaanb    15 年前

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

    所以这就是问题所在,唯一能做的就是提高代码的效率。通常,这意味着使用较低级别的语言,对通用框架或库的依赖性较低。如果你无能为力,绝对不要试图将软件堆栈分层。

    现代程序设计不喜欢这样-有一个推动程序员生产力,雇用更便宜的程序员,并重新设计代码一直(即重写),所以代码需要易于创建(有时维护)。因此,为了得到最好的结果,你需要权衡这些因素。行业标准的做法是根据系统的用途来混合系统。

    目前的最终性能是C/C++代码,最终程序员的生产力似乎是脚本语言。所以,理想的两种方法是用Python脚本语言编写主业务逻辑,并用它调用C/C++中专用的“电力助手”。如果需要更多的性能,可以在底层C/C++中编写更多代码。如果你需要更快速的开发,用脚本语言写更多。

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

        12
  •  0
  •   Mikael Gueck    15 年前

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

    因为一个典型的Java web应用程序 能够直接持久化状态,不需要额外的步骤或缓存失效,例如,它不需要执行PHP风格的复制SQL查询来获取每个请求的相同信息。相反,Java web应用程序通常将当前分析的复杂信息存储在堆上的本机数据结构中,堆以纳秒而不是毫秒的速度访问。

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