Для меня вывод выглядит немного иначе:
testA: 1 wallclock secs ( 0.16 usr + 0.11 sys = 0.27 CPU) @ 37.04/s (n=10)
(warning: too few iterations for a reliable count)
testB: 0 wallclock secs ( 0.09 usr + 0.02 sys = 0.11 CPU) @ 90.91/s (n=10)
(warning: too few iterations for a reliable count)
Сравнивая это с приличным значением итераций (я выбрал 100 000), я получаю это:
testA: 23 wallclock secs (12.15 usr + 10.05 sys = 22.20 CPU) @ 4504.50/s (n=100000)
testB: 11 wallclock secs ( 6.02 usr + 5.57 sys = 11.59 CPU) @ 8628.13/s (n=100000)
Взгляд на код говорит мне, что эти две субмарины, вероятно, проводят большую часть своего времени, копаясь в файлах, поэтому я сделал это:
my @files = glob "C:\\Windows\\System32\\*";
my $time = timethese( 1_000_000, {
testA => sub {
map $_->[0],
sort {$a->[1] <=> $b->[1]}
map [$_, -s $_],
@files;
},
testB => sub {
sort { -s $a <=> -s $b } @files;
},
}
);
и получите:
testA: 103 wallclock secs (56.93 usr + 45.61 sys = 102.54 CPU) @ 9752.29/s (n=1000000)
testB: -1 wallclock secs ( 0.12 usr + 0.00 sys = 0.12 CPU) @ 8333333.33/s (n=1000000)
(warning: too few iterations for a reliable count)
Что-то пахнет здесь, не так ли?
Итак, давайте посмотрим на документы:
perldoc -f sort
В скалярном контексте поведение
"sort ()" не определено.
Aha! Итак, давайте попробуем еще раз:
my @files = glob "C:\\Windows\\System32\\*";
my $time = timethese( 100_000, {
testA => sub {
my @arr= map $_->[0],
sort {$a->[1] <=> $b->[1]}
map [$_, -s $_],
@files;
},
testB => sub {
my @arr = sort { -s $a <=> -s $b } @files;
},
}
);
Это дает мне:
testA: 12 wallclock secs ( 7.44 usr + 4.55 sys = 11.99 CPU) @ 8340.28/s (n=100000)
testB: 34 wallclock secs ( 6.44 usr + 28.30 sys = 34.74 CPU) @ 2878.53/s (n=100000)
Итак. Чтобы ответить на ваши вопросы: преобразование Шварца поможет вам всякий раз, когда вы используете его осмысленно. Бенчмаркинг покажет это, когда вы сравните результаты значительным образом.