Dies ist ein (beabsichtigtes) Skript, das 1000 Zeilen Pseudozufallszahlen ausgibt.
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"
Ergebnis
END: 0.016832s
Nachtrag vom 10.03.2015 Ein Skript, das korrigiert, worauf @scivola hingewiesen hat 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)
Ergebnis
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);
}
Ergebnis
END: 0.000017s
Ich bin der Meinung, dass das Verhältnis oder die Reihenfolge fast den Daten entspricht, die von Google ausgegeben werden. .. .. Ruby hat sauberen Code, daher ist es meiner Meinung nach am besten geeignet, um einfache Webanwendungen zu erstellen und Programmierung zu studieren!
Ja.
2015/03/15 Nachtrag Es scheint, dass es nicht notwendig war, randam.rand (1000) in den Block zu setzen Der Prozess ist auch erheblich schneller, was dazu führt, dass Python überholt wird. (^^)
Es ist ein Rätsel, dass das Inkrement hinzugefügt wurde (´ω `) ‥ Toho
Jedoch‥
Wenn es sich um einen Benchmark handelt, der nur Zufallszahlen generiert, ist das Sprachverarbeitungssystem nicht so relevant. Ich denke, es wird die Leistung des eingebauten Zufallszahlengenerators messen.
Bestimmt. Ich fühle mich so. Deshalb habe ich einen Test durchgeführt, der auch Ergebnisse liefert. Ruby verwendet Puts, weil es Zeilen gemäß Pythons Druck und Cs Druck bricht. 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
c gcc compiler
#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
Da es die Anzahl der Zeilen zählt, habe ich versucht, einen Prozess der Ausgabe in Text durch Umleitung einzufügen. Dies ist das Ergebnis einer nicht standardmäßigen Ausgabe. Ergebnis ist C、Ruby、Python Das Ergebnis ist, dass es in der Größenordnung von schneller ist.
Schreiben Sie das Ergebnis der Standardausgabe in das Terminal, nicht die Ausgabe in Tail oder Text. 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 ist immer noch schneller, aber Ruby war schneller beim Umleiten zu Text. Als die Standardausgabe an das Terminal erfolgte, war das Ergebnis ungefähr gleich (obwohl ich mir Sorgen über die Unschärfebreite von Python mache).
Ruby war nicht langsam.