Recent changes

2013-04-14 2013-04-02 2013-02-17 2013-01-29 2013-01-20 2013-01-18 2012-12-08 2012-11-06 2012-09-04 2012-08-02

php/Bench

Javaを越えてみせる!

動作環境

OS Windows XP Professional
CPU Pentium M 1.10GHz
メモリ 512MB
PHP PPHP4.3.9 + Apache2.0.50 Zend Optimizer2.5.5
Java JDK1.4.2 + Tomcat4.1.30

5000までの素数をWebブラウザーに表示するテスト

まずは、演算処理の実行速度を検証してみたいと思います。演算処理の実行速度を比較するプログラムとして5000までの素数をWebブラウザーに表示するプログラムを用意しました。プログラムを実行してから終了するまでの秒数を表示することで、演算処理における実行速度の比較を行います。ソースコードと検証結果は下記をご覧ください。

<?php
// 処理開始時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$start = $sec1 + $sec2;
echo 'start = '.$start.'<br>';
// 5000までの素数を算出して表示する
for($i = 2; $i <= 5000; $i++) {
   $divisor = 0;
   for($j = 1; $j <= $i; $j++) {
       if($i % $j == 0) {
           $divisor++;
       }
   }
   if($divisor == 2) {
       echo $i.'<br>';
   }
}
// 処理終了時間を取得して表示する
list($sec1, $sec2) = explode(" ", microtime());
$end = $sec1 + $sec2;
echo 'end = '.$end.'<br>';
// 処理時間を算出して表示する
$elapse = $end - $start;
echo 'elapse = '.$elapse.'秒';
?>

Java(JSP)版 5000までの素数をWebブラウザーに表示するプログラム <cat> <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ page import="java.util.*" %>

<% long start = new Date().getTime(); %> start = <%=start%><br>

<!-- 5000までの素数を算出して表示する --> <% int divisor; for(int i = 2; i <= 5000; i++) { divisor = 0; for(int j = 1; j <= i; j++) { if(i % j == 0) { divisor++; } } if(divisor == 2) { %> <%=i%><br> <% } }

long end = new Date().getTime(); %> end = <%=end%><br>

<!-- 処理時間を算出して表示する --> elapse = <%=(float)(end - start) / 1000%>秒 </cat>

5000までの素数をWebブラウザーに表示するプログラムの実行速度 ||PHP4|Java(JSP)| |1回目| 14.69秒 | 0.46秒| |2回目| 14.71秒 | 0.46秒| |3回目| 14.71秒 | 0.45秒| |4回目| 14.71秒 | 0.45秒| |5回目| 14.70秒 | 0.46秒| |平均| 14.70秒 | 0.46秒|

結果は以上のとおりです。演算処理においてPHP4はJavaと比較して約32分の1の実行速度しかないという結果となりました。上記プログラムによって 5000までの素数を算出すると12502499回の繰り返し処理を行うことになりますが、1秒あたりの繰り返し処理数に換算するとPHP4で約 850510回/秒、Javaでは約27179346回/秒となります。Webアプリケーションにおける演算処理の実行速度では圧倒的にJavaが有利なようです。

以上のとおり、バッチ処理でもWebアプリケーションとほぼ同様の結果となりました。PHP4の実行速度はJavaの実行速度と比較して約30分の1ということになります。1秒あたりの繰り返し処理数に換算するとPHP4で約844764回/秒、Javaでは25004998回/秒となります。

Webアプリケーションにおいても、バッチ処理においても、PHP4の演算処理速度は、Javaの30分の1以下という結果となりました。このような結果となった原因は、やはりZendエンジンにあると筆者は考えています。JDK 1.4のJVMと比較して、PHP4のZendエンジンには、CPUリソースを有効に活用するための改良の余地が、まだまだ残されているということではないでしょうか。