サーバ構築・運用・監視のネットフォース

サブルーチン呼び出しだけを大量にループして測定

ソース

#!/usr/local/bin/perl
use strict;
use warnings;
use Time::HiRes;
my $start_time= Time::HiRes::time;
for (0..10000000) {
f();
}
printf(“%0.4f\n”,Time::HiRes::time – $start_time);
exit;
sub f{}

■旧バージョン(5.10)で測定

[PackHound][root@SV00000 packhound]# perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
[PackHound][root@SV00000 packhound]# .test.pl
1.2981
[PackHound][root@SV00000 packhound]# .test.pl
1.2852
[PackHound][root@SV00000 packhound]# .test.pl
1.2967

■新バージョン(5.24)で測定

[PackHound][root@SV00000 packhound]# perl -v
This is perl 5, version 24, subversion 0 (v5.24.0) built for x86_64-linux-thread-multi
[PackHound][root@SV00000 packhound]# ./test.pl
0.7121
[PackHound][root@SV00000 packhound]# ./test.pl
0.7216
[PackHound][root@SV00000 packhound]# ./test.pl
0.6978

あれ、結構早くなってる・・・! 1.8倍?(ループを回す処理もあるので、サブルーチン呼び出し自体はもうちょっと早いっぽいです)
まあサブルーチン呼び出しが遅くてどうしようっていう事象があまりないが。
これはもしや、オブジェクト呼び出しも早くなってる可能性が・・・!
とおもってやってみたら(ソースは割愛)

■旧
[root@sv test]# perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

■新
[root@sv test]# perl -v
This is perl 5, version 24, subversion 0 (v5.24.0) built for x86_64-linux-thread-multi

※各5000000回ループ
[root@sv test]# ./main.pl
オブジェクト作成 > 7.5092⇒7.4631
インスタンスメソッド呼出 > 2.6875⇒2.6845
インスタンスプロパティ参照 > 0.6538⇒0.6527
セッターメソッド > 2.9284⇒2.9127
ゲッターメソッド > 2.4836⇒2.5281
静的メソッド呼出 > 1.7083⇒1.7182
静的プロパティ値代入 > 0.4039⇒0.3872
静的プロパティ参照 > 0.3266⇒0.3256

 

誤差範囲内でした・・・・
まあ当然メモリの確保とかいろいろやってるとは思いますが、どっちかっていうとここらへん早くならないかなぁ・・・