Il s'agit d'un script (prévu) qui génère 1000 lignes de nombres pseudo aléatoires.
Ruby -v 1.9
require 'benchmark'
result = Benchmark.realtime do
(1..1000).each do |x|
randam = Random.new
randam.rand(1000)
x += 1
end
end
puts "END: #{result}s"
résultat
END: 0.016832s
PostScript du 10/03/2015 Un script qui corrige ce que @scivola a souligné ruby -v ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
require 'benchmark'
randam = Random.new
result = Benchmark.realtime do
(1..1000).each do |x|
randam.rand(1000)
end
end
puts "END: #{result}s"
END: 0.00010036501043941826s
Python 2.7
import random
import timeit
def hoge():
random.randrange(1000)
t = timeit.timeit(stmt=hoge, number=1000)
print "END: %fs"%(t)
résultat
END: 0.000763s
C
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, a;
clock_t start, end;
start = clock();
srand( (unsigned int)time(0));
for(i = 0 ; i < 1000 ; i++){
a = rand() % 1000;
}
end = clock();
printf("END: %fs \n", (double)(end - start) / CLOCKS_PER_SEC);
}
résultat
END: 0.000017s
Je pense que le ratio ou l'ordre est presque le même que les données fournies par Google. .. .. Ruby a un code propre, donc je pense qu'il est mieux adapté pour créer des applications Web simples et étudier la programmation!
Oui.
2015/03/15 postscript Il semble qu'il n'était pas nécessaire de mettre randam.rand (1000) dans le bloc Le processus est également considérablement plus rapide, ce qui entraîne le dépassement de Python. (^ ^)
C'est un mystère que l'incrément a été ajouté (´ω `) ‥ Toho
Pourtant‥
S'il s'agit d'un benchmark qui ne génère que des nombres aléatoires, le système de traitement du langage n'est pas si pertinent, Je pense que cela mesurera les performances du générateur de nombres aléatoires intégré.
Certainement. Je me sens comme ça. C'est pourquoi j'ai effectué un test qui produit également. Ruby utilise Puts car il coupe les lignes selon Python print et C printf. Ruby2.2.0p0
require 'benchmark'
randam = Random.new
result = Benchmark.realtime do
(1..1000).each do |x|
puts randam.rand(1000)
end
end
puts "END: #{result.to_f}s"
$ ruby bench.rb > rubybench.txt
$ tail rubybench.txt
714
905
522
713
861
615
240
626
126
END: 0.0006876440020278096s
$ wc -l rubybench.txt
1001 rubybench.txt
python 2.7.6
import random
import timeit
def hoge():
print random.randrange(1000)
t = timeit.timeit(stmt=hoge, number=1000)
print "END: %fs"%(t)
$ python bench.py > pythonbench.txt
$ tail pythonbench.txt
754
786
919
950
16
294
18
266
62
END: 0.001284s
$ wc -l pythonbench.txt
1001 pythonbench.txt
compilateur c gcc
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, a;
clock_t start, end;
start = clock();
srand( (unsigned int)time(0));
for(i = 0 ; i < 1000 ; i++){
a = rand() % 1000;
printf("%d\n", a);
}
end = clock();
printf("END: %fs \n", (double)(end - start) / CLOCKS_PER_SEC);
}
$ gcc -o hoge.o bench.c
$ ./hoge.o > benchc.txt
$ tail benchc.txt
12
589
344
998
668
221
426
11
508
END: 0.000167s
$ wc -l benchc.txt
1001 benchc.txt
Comme il compte le nombre de lignes, j'ai essayé d'insérer un processus de sortie en texte par redirection. C'est le résultat de la non-sortie de la norme. Le résultat est C、Ruby、Python Le résultat est qu'il est plus rapide de l'ordre de.
Écrivez le résultat de la sortie standard sur le terminal, pas la sortie dans la queue ou le texte. Ruby END: 0.00417862601170782s END: 0.0041498920036247s END: 0.004223413998261094s
Python END: 0.003860s END: 0.004131s END: 0.002629s
C END: 0.000922s END: 0.000938s END: 0.000984s
C est toujours plus rapide, mais Ruby était plus rapide lors de la redirection vers du texte. Lorsque la sortie standard a été effectuée sur le terminal, le résultat était à peu près le même (même si je suis préoccupé par la largeur de flou de Python).
Ruby n'était pas lent.