9 февр. 2010 г.

слон против дюка



Данная тема была не одну сотню раз поднята в различных статьях. Достаточно нагуглить "php vs java" и вы найдете пару-тройку миллиончиков совпадений. Однако мне стало интересно прочувствовать это на своей шкуре ).
Тестировать будем разумеется на одном железе и ОС.
Конфиг такой:
c2dE8200/Debian5.0/jdk6u18/php5.2.6/tomcat6.2.0/apache2.2.9
Итак, поехали !

1. Для начала сравним традиционный хелловорлд в консоли.
Код приводить нет смысла. Для более усиленной нагрузки сделаем такой цикл на шеле:
#!/bin/sh
for (  i = 0 ;  i <= 30;  i++  )
do
java Test00
done
Получилось такое среднее время:


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

2. Математика.
Test01.java:
public class Test01 {
    public static void main(String[] args) {        
        int r = 0;
        for (int i = 0; i < 100000; i++) {
            for (int j = 0; j < 10000; j++) {
                r = (r + (i * j) % 100) % 11;
            }
        }
    }
}
Test01.php
$r = 0;
for ($i = 0; $i < 10000; $i++) {
    for ($j = 0; $j < 10000; $j++) {
        $r = ($r + ($i * $j) % 100) % 11;
    }
}
Запускаем тесты:
time java Test01
time php Test01.php


Здесь уже видна выгода java и проигрыш php почти в 4 раза.

3. Тестирование в вебе.
Для тестирования будем использовать продукты от Apache - apache Web server и apache Tomcat соответственно. Тестируем всё тотже helloworld.
Чтобы адекватно сравнить время воспользуемся apache benchmark (он же ab)
ab -n 10000 -n 10000 http://localhost:8080/test/test02
ab -n 10000 -n 10000 http://localhost:80/Test02.php
Код пхп можно не менять с первоко теста, а для явы придется поправить на простейщий сервлет:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Test00 extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse 
       response) throws ServletException, IOException { 
        PrintWriter out = response.getWriter();
        out.println("Hello php slon!");
    }
}

Результат прямо противоложный первому тесту. Никакого тюнинга апача и томката не производилось, поэтому при определенной оптимизации и использовании кеширующих движков в пхп (например eaccelerator) можно получить другие цифры.

Как я уже говорил, данные эксперименты осуществлены сугубо для личного морального удовлетворения и возможно какой-либо значимости для многих могут не иметь :) Тем не менее буду очень рад если это кому-нибудь пригодится.
Возможно в следующих постах я сравню реализации некоторых вещей в java и php, таких как работа с разными бд, рендеринг графики и тп. Удачи !

2 комментария:

Павел Култышев комментирует...

что за java? неужто JSP?

RSH комментирует...

жаба как жаба, никакой не жсп )