PHP 与 Java 是不是存在能耗差异?

Posted

技术标签:

【中文标题】PHP 与 Java 是不是存在能耗差异?【英文标题】:PHP vs. Java are there energy consumption differences?PHP 与 Java 是否存在能耗差异? 【发布时间】:2009-08-23 15:49:40 【问题描述】:

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

我听到的例子是,Facebook 正是出于这个原因切换到 Java(不过我似乎在 google 上找不到任何这些东西)。

因为我的一个客户问我这个问题,如果它是真的,我很想证明。

【问题讨论】:

哇,我真的没想到会引起这样的骚动:) 我应该接受一个答案吗?我真的不想…… 那就不要了。如果您愿意,您可以在问题中总结一些(对您而言)最相关的答案,以便结束。 【参考方案1】:

计算机并不特别关心它们是在执行 Java 还是 PHP。功耗几乎相同。那么问题就变成了性能问题——如果您可以使用一台服务器处理更多请求,您将需要更少的服务器并消耗更少的功率。或者,如果您不是在做 Web 规模的应用程序,请更快地处理您的请求并花更多时间闲置,从而消耗更少的电量。

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

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

【讨论】:

“计算机并不特别关心他们执行的是 Java 还是 PHP”——一旦我们进入汇编语言级别,它就无关紧要了。但建筑不能成为决定性因素吗?从热力学的角度来看,产生轻​​量级线程是否比 CGI 必须启动重复的可执行文件来完成相同的任务更节能?共享资源在概念上不是更有效吗?我认为他们可能是。有趣的问题是:你必须走多远? 如果共享资源可以为您带来更高的性能,那么它就更节能。从概念上讲,共享资源的能力确实提供了更多优化选项。 最佳答案。需要更多的选票!功耗有很多因素。最好的衡量标准是真正的性能(假设硬件相同)。性能衡量软件堆栈利用硬件的效率,如果将其翻转,则意味着性能更高的软件使用更少的硬件来完成任务,这通常意味着使用的功率更少。 使用多少cpu,绝对是一个因素。现代 CPU 在睡眠时比实际执行任何操作时消耗的电量要少得多(除非禁用节能),并且更快的实现将更快地完成工作,因此 cpu 可以重新进入睡眠状态。 (例如,我的 i7-6700HQ CPU 通常在 800 MHz 时打瞌睡。但是当有事要做时,它会一直到 3400MHz 直到完成,然后又回到 800MHz 时打瞌睡。除非我禁用省电模式,然后永远不会低于 3000,在有事可做时交替 3000-3400MHz。)【参考方案2】:

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

所讨论的平台具有如此多的可变性,以至于无法进行任何通用比较。仅举几个可变点。​​p>

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

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

Ants' answer(为他点赞)中指出的关键点是:如果有足够的需求,性能更好的平台总是更节能,因为它能够为相同数量的请求,更少的硬件。

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

【讨论】:

【参考方案3】:

我对这个问题感到惊讶,直到我进行了谷歌搜索,发现 this 向上。这是一个严重的问题,我没有想到。

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

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

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

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

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

如果你真的发疯了,那么一个性能监控工具怎么样?除了显示应用程序的每个部分消耗的内存和 CPU 的位置之外,还会显示消耗最多的能量的位置吗?

现在我希望我能再次投票赞成这个问题。

【讨论】:

【参考方案4】:

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

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

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


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

【讨论】:

【参考方案5】:

您所说的能耗是指瓦特功耗吗?

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

切换所带来的问题(改变生产/发布平台、学习曲线时间损失、新业务软件成本等)将非常严重。我看不到这么重要的决定,除非经过严肃的和公司特定的业务分析任务和相应的结果。

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

【讨论】:

【参考方案6】:

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

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

如果我们在 Interpreted Basic、Java 和 C 等语言中实现了针对资源消耗优化的特定功能,我们预计这将需要最多的执行资源。

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

现在假设(纯粹是假设,我并不是说是这种情况)用 C 开发比用 Java 更努力,用 Java 比用 Basic 开发更努力。您将如何权衡开发和维护工作与资源消耗?

真的很难做到。如果有人告诉我他们是基于功耗而转向 Java,我真的很想知道更多。这样做的成本是多少?盈亏平衡点在哪里? [顺便说一句 - 我几乎完全在 Java 中工作,我很想能够说“我们赢了,看看我们的功耗有多低!”]

【讨论】:

【参考方案7】:

这是一个很难回答的问题,除非正如前面提到的基准,您设置了一些比较规则。

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

如果您查看 Java 框架,那么您可能想比较这三个: Tomcat + JDK 6 + JSP 阿帕奇 + PHP Scala + Lift 框架

我包含了 Scala,因为它编译为 java 字节码,我希望它的功耗最低。

我不确定哪个会是赢家,我会押注 Scala,但您会希望确保实现了相同的应用程序,然后只比较功耗。

PHP 可能会赢,因为 apache 和 PHP 的内存使用率似乎低于 Java,但我无法真正比​​较 Scala 和 PHP。

对我来说最大的未知是,如果你调用相同的 java 代码,那么它已经变成了本地代码,因此运行速度会更快,但 JSP 应该被预编译以利用 Java。

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

IMO 的一个大测试是看看我们能否在减小机器尺寸时获得相同的性能,因此,如果您需要 3 台负载平衡的 PHP 或 Java 计算机和 1 台 Scala 机器可以具有相同的性能,那么 scala(使用 Lift)将获胜。

【讨论】:

【参考方案8】:

电源效率本身就是一个完整的领域。测量性能通常是最好的方法(假设硬件相同)。如果要比较不同的硬件,那就完全是“另一场球赛”了。

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

还有很多其他的考虑:

数据中心 考虑到服务器位于冷却的数据中心中。服务器产生热量,需要去除热量以保护硬件。空调机组没有无限粒度。他们的效率通常伴随着数量。因此,如果我将服务器数量从 2 台减少到 1 台,我可能节省了一台服务器的功耗,但冷却成本可能不会太多。但是,如果改变我的架构可以让我减少 100 台服务器……那是很大的节省!

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

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

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

如果您只关心能源效率,是的,请使用包中的所有工具来帮助您实现目标。但大多数时候,这只是整体方案中的一个小变量,也是你成本中最小的一个。

【讨论】:

您的成本中的最低值,以地球上的费用为代价。我真的很高兴这些事情终于被公开讨论了:-) 你断章取义了。我指的是权力通常是您业务成本中最低的。您的评论表明,减少其他成本也无助于地球。这根本不是真的。【参考方案9】:

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

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

如果您是 Google、Amazon 或其他每天从数千台服务器处理数十亿个请求的公司,我会担心这一点。否则,您的规模不足以对能源消耗做出任何积极的断言,因此您做出的任何决定都可能适得其反,因为不可能包括所有相关因素。

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

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

【讨论】:

【参考方案10】:

这与哪种语言的性能最好是同一个问题。现在,对于大多数程序员接触过的几乎每个项目。到目前为止,您编写系统的方式远远超过所使用的技术(假设系统规格正常)。

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

同样,您设计和编写系统的方式决定了系统的效率。

【讨论】:

【参考方案11】:

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

这就是问题所在,您唯一能做的就是让您的代码更有效率。通常这意味着使用较低级别的语言,并减少对通用框架或库的依赖。如果您无能为力,绝对不要尝试对软件堆栈进行分层。

现代编程不喜欢这样 - 程序员的生产力不断提高,雇用更便宜的程序员,并且一直在重新设计代码(即重写它),因此代码需要易于创建(有时还需要维护)。因此,为了获得最佳效果,您需要权衡这些因素。执行此操作的行业标准方法是根据用途简单地混合系统。

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

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

【讨论】:

【参考方案12】:

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

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

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

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

【讨论】:

以上是关于PHP 与 Java 是不是存在能耗差异?的主要内容,如果未能解决你的问题,请参考以下文章

是否存在用于定义蓝牙低能耗 GATT 服务的模式?

智能工厂管理系统开发智慧能耗管控系统开发

智慧园区平台能耗分析管理系统搭建解决方案

智慧园区平台能耗分析管理系统搭建解决方案

积极响应国家“双碳”战略,这场能耗预测竞赛值得参加

如何使用机器学习算法进行能耗预测 2:算法与架构