Сравнение производительности Ruby, PHP и Python на Linux x64 Intel Core i5
27.04.2015
(по состоянию на июль 2025, спустя 10 лет, Ruby всё так же безусловный лидер в скорости исполнения программ среди популярных интерпретируемых языков программирования)
Тесты на производительность (скорость выполнения) программ на Ruby 2 (2.2.2), PHP (5.6.7) и Python (2.7.9). Тесты совершенно простые.
В экспериментах использую конфигурацию Intel Core i5 3Ггц, 4Гб RAM, Linux x64.
Совершенно очевидно, что Ruby - абсолютный лидер по скорости выполнения программ! Скорость выполнения превосходит в разы! Cравнивались только сходные языки программирования, скриптовые.
Тест 1
Ruby
require "benchmark"
class A
def a(val)
val * 3
end
end
Benchmark.bm do | make |
i = 1
a_obj = A.new
3.times do
make.report {
sum = -1_000_000 * i
count = 10_000_000 * i
while (count -= 1) >= 0
sum += a_obj.a(i)
end
puts "#{sum}"
}
i+=1
end
end
PHP
class A {
public function a_func($val) {
return $val * 3;
}
}
$a_obj = new A();
for ($p = 1; $p < 4; $p++) {
$time = microtime(true);
$sum = -1000000 * $p;
$count = 10000000 * $p;
for ($i = 0; $i < $count; $i++) {
$sum += $a_obj->a_func($p);
}
print "$sum\t" . (microtime(true)-$time) . "\n";
}
Python
import time
class A:
def a(self, val):
return val * 3
i = 1
a_obj = A()
while (i < 4):
s = -1000000 * i
count = 10000000 * i - 1
start = time.time()
while (count >= 0):
s += a_obj.a(i)
count -= 1
elapsed = (time.time() - start)
print s
print elapsed
i += 1
Тест 2 (Фибоначи)
Ruby
require "benchmark"
def fib(n)
return n if n <= 1
fib(n - 1) + fib(n - 2)
end
Benchmark.bm do | make |
i = 0
5.times do
make.report { puts fib(30+i) }
i += 1
end
end
PHP
function fib($n) {
if ($n <= 1) return $n;
return fib($n - 1) + fib($n - 2);
}
for($i=0; $i<5; $i++) {
$t = microtime(true);
print fib(30+$i) . "\n";
print(microtime(true)-$t)."\n";
}
Python
import time
def fib(n):
if (n <= 1):
return n
return fib(n - 1) + fib(n - 2)
i = 0
while (i<5):
start = time.time()
print fib(30 + i)
elapsed = (time.time() - start)
print elapsed
i += 1
Результаты
Тест 1
Ruby
user system total real
29000000
0.630000 0.010000 0.640000 ( 0.643333)
118000000
1.310000 0.010000 1.320000 ( 1.313236)
267000000
1.940000 0.000000 1.940000 ( 1.939470)
PHP
29000000 1.3855249881744 118000000 2.6716480255127 267000000 4.0066411495209
Python
29000000 2.55204916 118000000 4.97329282761 267000000 7.52163100243
Тест 2
Ruby
user system total real
832040
0.140000 0.000000 0.140000 ( 0.141629)
1346269
0.220000 0.000000 0.220000 ( 0.213588)
2178309
0.350000 0.000000 0.350000 ( 0.346973)
3524578
0.550000 0.000000 0.550000 ( 0.558695)
5702887
0.910000 0.000000 0.910000 ( 0.907601)
PHP
832040 0.32892394065857 1346269 0.51861095428467 2178309 0.83380198478699 3524578 1.3471601009369 5702887 2.1651961803436
Python
832040 0.2678399086 1346269 0.366957187653 2178309 0.598000049591 3524578 0.964015007019 5702887 1.56219482422