Сравнение производительности 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