Benchmark Java, C++, Python, Perl and PHP

Шатался по инету в поисках простого графика скорости языков программирования при выполенении тривиальных задач. Запарился. Либо нет графиков (и, соответственно, самих тестов - только полемика), либо тесты безнадёжно устаревшие (ну кто сейчас пишет на php 4.1? или python 1.x? или java 1.3.x?). Посему...

... пляшем с бубном вокруг языков программирования. Результаты ошеломляют =))).
Сравнительное тестирование java, C++, Python, PHP и Perl - 6 тестов - IO, List, Hash, Console, No, Speed..

Результаты интересные =)


1. IO Test. Суть - впихнуть в файл циферки от 1 до 1 млн. Тривиально =))).

Значитс.. сёрсы:
PHP: test.php:

#!/usr/bin/php<?php

$fp = fopen('/tmp/iotest', 'wb');for ($i = 0; $i < 1000000; $i++){	fwrite($fp, $i);}fclose($fp);

?>

JAVA: test.java

import java.io.*;

public class test{	public static void main(String[] args)	{		try		{			File f = new File("/tmp/iotest");			PrintWriter pw= new PrintWriter(				new BufferedWriter(				new FileWriter(f)));			for (int i = 0; i < 1000000; i++)			{				pw.print(i);			}			pw.close();		}		catch(IOException ioe)		{			ioe.printStackTrace();		}	}}

(p.s. в гробу я видел эту яву)

C++: test.cpp

#include  #include  using namespace std;  int main(int argc,char *argv[]) { 	ofstream out; 	out.open("/tmp/iotest"); 	for(int i=0;i<1000000;i++) 	{ 		out<<i; 	} 	out.close(); } 

(p.s. все гениальное просто)

PYTHON: test.py

#!/usr/bin/python

f = open('/tmp/iotest','wb');for i in xrange(1000000):	f.write(str(i));f.close()

(p.s. нет, пожалуй все гениальное - очень просто +))

PERL: test.pl

#!/usr/bin/perl

open($F,">/tmp/iotest");for  $i (0 .. 1000000-1){	print $F "$i";}close($F);

(p.s. приснится - кошмаррррр)

РЕЗУЛЬТАТЫ ПЕРВОГО ТЕСТА (IO)
Все комментарии - в конце поста. Пока нет слов =).

C++ 0.2s
 
Java 0.5s
 
Perl 0.6s
 
Python 2.1s
 
PHP 4.4s
 

2. Hash Test. Создаём массивчики.

PHP: test.php:

#!/usr/bin/php<?php

for ($i = 0; $i < 6000; $i++){	$x = array();	for ($j = 0; $j < 1000; $j++)	{		$x[$j] = $i;		$x[$j];	}}

?>

PYTHON: test.py:

#!/usr/bin/pythonfor i in range(6000):	x={}	for j in range(1000):		x[j]=i		x[j]

JAVA: test.java:

import java.util.*;

public class test{	public static void main(String[] args)	{		for (int i = 0; i < 6000; i++)		{			Map x = new HashMap();			for (int j = 0; j < 1000; j++)			{				Integer I=new Integer(i);				Integer J=new Integer(j);				x.put(I,J);				x.get(I);			}		}	}}

C++: test.cpp:

#include  #include
 using namespace std;  int main(int argc,char *argv[]) { 	for (int i = 0; i < 6000; i++) 	{ 		map<int, int> x; 		for (int j = 0; j < 1000; j++) 		{ 			x[i]=j; 			x[i]; 		} 	} }

PERL: test.pl:

#!/usr/bin/perl

for $i (0 .. 6000-1){	%x=();	for $j (0 .. 1000-1)	{		$x{$j}=$i;		$x{$j};	}}

РЕЗУЛЬТАТЫ ВТОРОГО ТЕСТА (Hashing)

Java 1.0s
 
C++ 1.3s
 
PHP 3.1s
 
Python 4.1s
 
Perl 7.7s
 

3. Console Test. Скорость выплевывание инфы в консоль. Отправлялось все в /dev/null, дабы не зависить от скорости терминала.

PHP: test.php:

#!/usr/bin/php<?php

for ($i = 0; $i < 1000000; $i++){	echo $i . "\n";}

?>

PYTHON: test.py:

#!/usr/bin/python

for x in xrange(1000000):	print x

C++: test.cpp:

#include   int main(int argc,char *argv[]) { 	for(int i=0;i<1000000;i++) 	{ 		std::cout << i << std::endl; 	} }

JAVA: test.java:

public class test{	public static void main(String[] args)	{		for (int i = 0; i < 1000000; i++)		{			System.out.println(i);		}	}}

PERL: test.pl:

#!/usr/bin/perl

for $i (0 .. 1000000-1){	print "$i\n"}

РЕЗУЛЬТАТЫ ТРЕТЬЕГО ТЕСТА (Console)

Perl 0.6s
 
C++ 0.8s
 
PHP 1.4s
 
Python 1.7s
 
Java 3.0s
 

4. List Test. Заполняем списки.

PHP: test.php:

#!/usr/bin/php<?php

for ($i = 0; $i < 3000; $i++){	$v = array('a', 'b', 'c', 'd', 'e', 'f', 'g');	for ($j = 0; $j < 1000; $j++)	{		array_push($v, $j);		$v[$j];	}}

?>

PYTHON: test.py:

#!/usr/bin/pythonfor i in range(3000):	v=['a','b','c','d','e','f','g']	for j in range(1000):		v.append(j)		v[j]

PERL: test.pl:

#!/usr/bin/perlfor $i (0 .. 3000-1){	@v=('a','b','c','d','e','f','g');	for $j (0 .. 1000-1)	{		push(@v,$j);		$v[j];	}}

JAVA: test.java:

import java.util.*;

public class test{	public static void main(String[] args)	{		List initial = new ArrayList();		initial.add("a");		initial.add("b");		initial.add("c");		initial.add("d");		initial.add("e");		initial.add("f");		initial.add("g");

		for (int i = 0; i < 3000; i++)		{			List v = new ArrayList(initial);			for (int j = 0; j < 1000; j++)			{				v.add(new Integer(j));				v.get(j);			}		}	}}

C++: test.cpp:

#include  #include  using namespace std;  int main(int argc, char *argv[]) { 	vector initial;	initial.push_back(1);	initial.push_back(2);	initial.push_back(3);	initial.push_back(4);	initial.push_back(5);	initial.push_back(6);	initial.push_back(7);

	for (int i = 0; i < 3000; i++)	{		vector v(initial);		for (int j = 0; j < 1000; j++)		{			v.push_back(j);			v[i];		}	}}

РЕЗУЛЬТАТЫ ЧЕТВЕРТОГО ТЕСТА (List)

C++ 0.2s
 
Java 0.4s
 
Perl 1.7s
 
Python 2.0s
 
PHP 2.4s
 

5. No Test. Из разряда глупых =) Просто ничего не делаем.

PHP: test.php:

#!/usr/bin/php<?php

?>

PYTHON: test.py:

#!/usr/bin/python

PERL: test.pl:

#!/usr/bin/perl

JAVA: test.java:

public class test{	public static void main(String[] args)	{

	}}

C++: test.cpp:

int main(int argc, char *argv[]){

}

РЕЗУЛЬТАТЫ ПЯТОГО ТЕСТА (No)
( все знают почему тут ява обосралась =) ляляля.. =) )

C++ 0.003s
 
Perl 0.004s
 
Python 0.017s
 
PHP 0.052s
 
Java 0.153s
 

6. Speed Test. Скорость итераций.

PHP: test.php:

#!/usr/bin/php<?php

for ($i = 0; $i < 20000000; $i++){

}

?>

PYTHON: test.py:

#!/usr/bin/pythonfor x in xrange(20000000):	pass

PERL: test.pl:

#!/usr/bin/perl

for $i (0 .. 20000000-1){

}

JAVA: test.java:

public class test{	public static void main(String[] args)	{		for (int i = 0; i < 20000000; i++);	}}

C++: test.cpp:

int main(int argc, char *argv[]){	for (int i = 0; i < 20000000; i++);}

РЕЗУЛЬТАТЫ ШЕСТОГО ТЕСТА (Speed)

C++ 0.07s
 
Java 0.20s
 
Perl 2.91s
 
PHP 3.18s
 
Python 3.64s
 


фух. Ну вот. И что мы имеем? Наишустрейший, конечно - си. Однако надо помнить что debug c++ может превратится в nightmare Скорость python c ). Плюс переносимость нулевая.. нужен собственный экспириенс =)). Ява неожиданно хороша. Половина программ на яве тормозит так лишь из-за заслуг разработчиков.. на самом деле очень шустрый язык... но синтаксис.. мама, роди меня обратно. Ненавижу писать на яве =)). Посему - в мусорку.

Такс.. питон и пхп. В целом - питон чуть медленнее практически во всех тестах. (2 года назад питон проигрывал в скорости почти двухкратно). Но за удобство, за легкую отладку.. в общем я отдаю пальму первенства среди высокоуровневых языков питону =). Если среди web-приложений нужно ещё хорошенько подумать на питоне или на пхп писать, то среди GUI, если писать на высокоуровневом языке - питон =). Да и плюс посмотрите, как легко, непринуждённо и красиво все задачи решаются на питоне =) Уникальный синтаксис! Удачи, коллеги =)).

О перле ничего не скажу - он тут только для разнообразия. Писать на нём сейчас - зачем?

p.s. вообще-то я думал что питон гораздо медленнее чем оказалось. И думал что перл быстрее =).

p.p.s да, кстати, чего юзалось:
java: sun-jdk-1.5.0_07
c++: gcc-4.1.1
php: php-5.1.4
python: python-2.4.3
perl: perl-5.8.8
Linux version 2.6.16-026test014-MockSoul-OVZ (gcc version 4.1.1 (Gentoo 4.1.1)) #16 Sat Jul 8 15:09:49 MSD 2006
машинка: AMD Athlon64 (dual core, 2.6ghz each), 1.5GB DDR, впрочем это не так важно =).


added

Да, вот ещё небольшое ИМХО:

Language PHP Perl Python Java C++
Скорость написания программ 5 2 5+ 1 3
Отладка 4 4 5 4 2
Библиотеки 4 4+ 5 (3rd party) 5 5 (3rd party)
Скорость 3 4 2 5 5+
Итого, средний балл 4 3.5 4.25 3.75 3.75

Эт ни о чем практически не говорит.. PHP кроме как для веб-программирования вообще непонятно где можно использовать. Хоть и есть CLI, но фу... мой выбор - вообще Python + CPython + (иногда) JPython =). Для С++ чтобы написать кроссплатформенное приложение, нужно поплясать с mingw и иже с ним. Возни все равно много =).























































Смотрите также:

Вам это будет интересно!

  1. Безымянный 60930
  2. Perl + mod_perl + gdb
  3. Знакомство с Ima
  4. Как создать самый деревянный шаблон к Joomla part 3.