PHP и Java есть различия в потреблении энергии? - PullRequest
46 голосов
/ 23 августа 2009

Я слышал слух, что Java потребляет меньше энергии, чем PHP, и мне было интересно, если и как это будет правдой. В настоящее время я работаю в компании, где мы основываем большинство наших приложений на PHP. Потребление энергии никогда не было проблемой для нас, но мы работаем над большими проектами, где это может иметь значение. Мы любим PHP для веб-разработки и задаемся вопросом, как распространяются такие слухи, и насколько они правдивы.

Пример, который я слышал, был о том, что Facebook именно по этой причине переключается на Java (хотя я не могу найти ничего подобного в Google).

Так как мой клиент задает мне этот вопрос, я бы хотел доказательства, если это правда.

Ответы [ 12 ]

29 голосов
/ 23 августа 2009

Компьютеры не особо заботятся, работают ли они на Java или PHP. Потребляемая мощность практически одинакова. Тогда вопрос становится вопросом производительности - если вы можете обслуживать больше запросов на одном сервере, вам потребуется меньше серверов и потреблять меньше энергии. Или же, если вы не работаете с приложениями веб-масштаба, обслуживайте свои запросы быстрее и тратите больше времени на холостом ходу, что потребляет меньше энергии.

Учитывая чистый Java и чистый PHP, Java как статически типизированный язык JIT, конечно, быстрее. Вопрос скорее в том, что вы можете сделать быстрее, если вам доступны члены команды и усилия по развитию.

Я считаю, что лучший способ - это смешивать языки, использовать существующие инфраструктурные инструменты на основе Java, такие как Terracotta, для создания критически важных для производительности компонентов и чего-то более гибкого для создания сложной, но не такой сложной логики для бизнеса и представления.

18 голосов
/ 23 августа 2009

Я действительно очень сомневаюсь, что это проблема только языка.

Платформы, о которых идет речь, обладают такой большой вариабельностью, что могут сделать любой общий спор сравнения. Чтобы назвать несколько точек изменчивости.

  • Контейнер сервлетов для Java (Tomcat, Glassfish, Websphere, Jetty, ...)
  • Веб-сервер для PHP (Apache, IIS, lighttpd, nginx, ...)
  • Кэши Opcode для PHP
  • Использованные библиотеки и фреймворки
  • Операционные системы
  • задействованы жесткие диски
  • Охлаждение
  • Алгоритмы на самом приложении

Я действительно сомневаюсь, что вы можете выделить столько переменных в полезную метрику. Самое большее, вы можете выбрать два эквивалентных приложения (отмечая все варианты платформы), используя одно и то же оборудование, и сравнить их. Затем улучшайте худшее, пока оно не превзойдет лучшее. Я думаю, что правильное измерение будет как ваттами в час, так и запросами в секунду.

То, что отмечено в Ответ муравья (обоснуйте его) - это ключевой момент: более эффективная платформа всегда будет более энергоэффективной, учитывая достаточный спрос , поскольку быть в состоянии обслуживать такое же количество запросов с меньшим количеством оборудования.

Но какая платформа лучше работает, зависит не только от языка, зависит от того, что отмечено выше (и некоторых других).

9 голосов
/ 23 августа 2009

Я был удивлен этим вопросом, пока не сделал поиск в Google, который показал это . Это серьезная проблема, о которой я бы не подумал.

Теперь, когда я думаю об этом, я думаю, что возникает вопрос о том, кто оплачивает счет за электричество. Java-стратегия Sun заключалась в продаже серверов: большое железо для задней части, тонкие клиенты для фронт-энда.

Возможно, такие технологии, как Flex, возвращают большую часть работы клиенту и оставляют им больший процент от счета за электричество.

Но я был бы удивлен, увидев рейтинг языков по потреблению энергии.

Очень интересный вопрос. Я голосую за это.

Какая захватывающая проблема. Разве не было бы интересно написать приложение на нескольких языках, развернуть его на идентичном оборудовании и измерить энергопотребление? Я хотел бы увидеть это.

Если вы действительно сходите с ума, как насчет инструмента мониторинга производительности, который, помимо того, что показывает, где память и процессор потребляются в каждой части вашего приложения, также показывает, где используется больше энергии?

Теперь я бы хотел снова проголосовать за этот вопрос.

4 голосов
/ 23 августа 2009

Как и многие сравнительные вопросы здесь, вам, вероятно, потребуется придумать эталонный тест, чтобы действительно определить, так ли это.

lesswatts.org содержит немного информации об управлении питанием приложений , а также о некоторых других аспектах энергопотребления в системах Linux. Как примечание, они, кажется, используют PHP, так что это может чего-то стоить само по себе:)

Они продолжают повторять, что вы должны использовать PowerTOP , чтобы определить, какие приложения вызывают наибольшее энергопотребление, и на скриншоте видно, что они проверяют пробуждения из режима ожидания, по крайней мере.


В большинстве случаев веб-сервер бездействует, затем он «обслуживает» очень короткий момент, а затем возвращается к ожиданию следующего соединения. В связи с этим PHP внесет очень небольшой вклад во весь процесс: только обслуживающую часть. Так что мне интересно, было ли реальным тестом сравнение конкретного веб-сервера на основе Java с Apache / PHP, обслуживающим похожие страницы. Если это так, то это не совсем справедливое сравнение PHP и Java - любой из этих двух вариантов, рассматриваемых как обслуживающие реальную страницу, обычно активен только в течение миллисекунд одновременно. Я бы подумал, что именно веб-сервер, который выбирает или опрашивает соединения, - это тот, который потребляет энергию.

3 голосов
/ 23 августа 2009

Под энергопотреблением вы подразумеваете потребляемую мощность в ваттах?

Я не уверен на 100%, но даже если это так, я думаю, что это похоже на оптимизацию части вашего кода, которая выполняется за 0,01% времени выполнения вашей программы.

Проблемы, которые будут вызваны переключением (смена платформ производства / выпуска, потеря времени на обучение, затраты на новое программное обеспечение для бизнеса и т. Д.), Будут довольно серьезными. Я не вижу такого важного решения, кроме как после серьезной и специфической для компании задачи бизнес-анализа и соответствующих результатов.

Однако это должно привести к интересному обсуждению.

2 голосов
/ 24 августа 2009

Более эффективный код потребляет меньше ресурсов, включая энергопотребление. Java в целом имеет более быструю и эффективную реализацию, поэтому при прочих постоянных факторах Java, вероятно, будет потреблять меньше энергии на сервере.

Но все остальные факторы не постоянны . Невозможно сказать, какие изменения происходят в зависимости от вашего решения использовать PHP или Java. Например, для разработки Java требуется больше времени, а это означает, что программисты Java дольше работают на своих компьютерах, и их потребление энергии может превысить ваши сбережения на сервере.

Если вы Google, Amazon или какая-то другая компания, которая ежедневно обслуживает буквально миллиарды запросов с тысяч серверов, я бы беспокоился об этом. В противном случае ваша шкала недостаточно велика, чтобы делать какие-либо позитивные утверждения о потреблении энергии, поэтому любое принятое вами решение с такой же вероятностью будет контрпродуктивным, как и продуктивным, поскольку невозможно включить все соответствующие факторы.

Уместным примером является несколько месяцев назад, когда ходили слухи, что вы можете сэкономить энергию, установив черный фон на рабочем столе. Мысль была о том, что черный == нет света, поэтому вы не использовали столько света. Google (одна из немногих компаний, у которой достаточно энергии, чтобы сделать это исследование продуктивным) провела несколько экспериментов, провела некоторые исследования и обнаружила, что ЖК-экраны производят белый свет, несмотря ни на что, и фильтрует его, пропуская второй ток через пиксели. по-другому. Таким образом, устанавливая пиксель в черный цвет, вы устанавливаете его фильтрацию на максимум, фактически используя максимально возможную энергию. Самым энергосберегающим фоном рабочего стола (по крайней мере, на ЖК-экране) является белый фон. Однако, поскольку белый фон ранит глаза людей, мало кто устанавливает свой фон рабочего стола на белый, и слух о том, что черный фон экономит энергию, все еще распространен.

Итак, короче говоря, беспокойство об этом, скорее всего, принесет больше вреда, чем пользы.

2 голосов
/ 23 августа 2009

Энергоэффективность - это целое поле само по себе. Измерение производительности, как правило, является наилучшим способом (с учетом того же оборудования). Если сравнивать различное оборудование, то это целая игра в мяч.

Таким образом, с учетом того же аппаратного обеспечения, если программный стек может работать лучше, чем другой программный стек, то это означает, что более производительный программный стек будет использовать меньше энергии «на запрос», чем другой. Если разница в производительности достаточно велика для того, чтобы вы консолидировали свои серверы в меньшую, то это еще большая победа!

Есть много других соображений:

Центры обработки данных Учтите, что серверы размещаются в охлаждаемых центрах обработки данных. Серверы вырабатывают тепло, и для защиты аппаратного обеспечения необходимо удалить тепло. У кондиционеров нет бесконечной детализации. Их эффективность обычно приходит с объемом. Таким образом, если я уменьшу количество серверов с 2 до 1, возможно, я сэкономлю энергопотребление одного сервера, но, вероятно, не слишком сильно из-за затрат на охлаждение. Но если изменение моей архитектуры позволяет мне сократить 100 серверов ... это большая экономия!

Аппаратные и периферийные устройства Использование самого энергоэффективного стека SW и запуск его на сервере Pentium 4 = глупость;) Наиболее энергоэффективное программное обеспечение не может компенсировать неэффективное оборудование. Один интересный урок здесь: «пусть парни из железной промышленности беспокоятся о мощности» Вы беспокоитесь о выходе вашего приложения на рынок. Когда ваше приложение может приносить доход, вы всегда можете купить новейший 16-ядерный процессор Core 5 hexa-deca и мгновенно получить свою энергоэффективность;)

Virtualizaton Если ваше приложение имеет малый объем, объединение его в виртуальную машину, работающую в многоядерной системе, вероятно, сэкономит вам больше энергии, чем переписывание его в ваш самый энергоэффективный стек SW и запуск на автономном сервере.

Время программиста Вам нужны программисты, обладающие знаниями в «самом энергоэффективном» программном стеке. Вы должны рассмотреть, если это правильные инструменты. Программисты используют компьютеры для разработки программного обеспечения, и чем больше времени им требуется для разработки (если они ограничены неправильными инструментами), тем больше энергии потребляется. Не говоря уже о том, что вам придется платить им больше часов. Это обычно отвергает любые проблемы энергопотребления, потому что затраты здесь на порядок выше.

Если ваша единственная забота - это энергоэффективность, да, используйте все инструменты в сумке, чтобы доставить вас туда. Но в большинстве случаев это всего лишь одна небольшая переменная в общей схеме вещей, а также наименьшая из ваших затрат.

2 голосов
/ 23 августа 2009

На этот вопрос сложно ответить, если, как было упомянуто о тестах, вы не установите некоторые правила для сравнения.

Например, сравнивать шутер от первого лица Java3D с веб-страницей PHP было бы несправедливо, поскольку Java проиграет.

Если вы посмотрите на фреймворки Java, вы можете сравнить эти три: Tomcat + JDK 6 + JSP Apache + PHP Scala + Lift framework

Я включил Scala, поскольку он компилируется в байт-код Java, и я ожидаю, что он будет самым дешевым по мощности.

Я не уверен, что будет победителем, я бы сделал ставку на Scala, но вы хотели бы убедиться, что у вас реализовано то же приложение, а затем просто сравнить энергопотребление.

PHP, вероятно, победит, так как apache и PHP, кажется, потребляют меньше памяти, чем Java, но я не могу действительно сравнить Scala и PHP.

Большим неизвестным для меня является то, что если вы вызываете тот же код Java, то он уже превратился в собственный код и будет выполняться быстрее, но JSP должен быть предварительно скомпилирован для использования Java.

Но если вы используете технологии Web2.0, то это изменится, так как большая нагрузка на браузер возлагается, если у вас большое приложение javascript, то вы просто делаете серверные вызовы, что снизит энергопотребление на Сервер как работа рендера передается в браузер. В этот момент JIT для Java должен вступить в игру, а Java или Scala, как я ожидаю, будет меньше по энергопотреблению.

Большим тестом, IMO, было бы выяснить, сможем ли мы получить ту же производительность, что и при уменьшении размера машины, поэтому, если вам нужно 3 компьютера для PHP или Java с балансировкой нагрузки и 1 компьютер Scala может иметь такую ​​же производительность, тогда Scala (используя Lift) победит.

2 голосов
/ 23 августа 2009

Я понимаю, что многие крупные компании испытывают трудности с ростом спроса на ресурсы в своих центрах обработки данных. К ним относятся как площадь пола, так и энергопотребление. Так что я вполне могу поверить, что рационализация приложений в пользу низкого потребления ресурсов является стратегией, которая принимается.

Является ли использование Java, PHP или любой другой технологии реализации фактором, определяющим энергопотребление, для меня менее очевидно.

Если бы мы реализовали определенную часть функций, оптимизирующую потребление ресурсов, скажем, в Interpreted Basic, Java и C, что, как мы ожидаем, потребует большинства ресурсов выполнения.

Мне нужно было бы получить некоторые веские доказательства, но я мог бы полагать, что чистый интерпретируемый язык может потреблять больше, чем Java, и даже с JIT и т. Д., В свою очередь, он может потреблять больше, чем C.

Теперь просто предположим (чисто гипотетически, я не говорю, что это так), что было больше усилий для разработки на C, чем на Java, и больше усилий для разработки на Java, чем в Basic. Как бы вы поменялись усилиями по разработке и обслуживанию на потребление этого ресурса?

Действительно сложно сделать. Если бы кто-то сказал мне, что они переходят на Java исключительно из-за энергопотребления, я бы действительно хотел знать больше. Каковы затраты на это? Где была точка безубыточности? [Кстати - я работаю почти исключительно на Java, я бы хотел сказать: «Мы выигрываем, посмотрим, как мало у нас энергии!»]

1 голос
/ 23 августа 2009

Это тот же вопрос, что и на каком языке лучше всего работать. Теперь, почти для каждого проекта, с которым связывается большинство программистов. То, как вы пишете систему, намного перевешивает используемые технологии (учитывая, что система работает нормально).

Выбор языка в зависимости от производительности - imho для встраиваемых систем и ученых. Вы выбираете язык в зависимости от решаемой проблемы, крайне редко - от того, насколько эффективен процессор.

Опять же, именно то, как вы проектируете и пишете систему, определяет, насколько эффективной она будет.

...