Сравнение производительности Ruby, PHP и Python на Linux x64 Intel Core i5
27.04.2015
Тесты на производительность (скорость выполнения) программ на 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