Friday, May 23, 2014

[メモ] Perlのクロージャ生成速度は遅くない件

いくつかのスクリプト言語の処理系では、オブジェクトを生成して利用する場合と比較して、クロージャを生成する場合のオーバーヘッドが大きいという問題が知られています。最近、Perlでクロージャを使いたい場面に遭遇したので、ベンチマークをとってみることにしました。

結果、以下のように両者を使うアプローチで大きな速度差はないということがわかったのでメモ。

$ perl closure-vs-method.pl
         Rate  method closure
method  535/s      --    -12%
closure 609/s     14%      --
$ cat closure-vs-method.pl
use strict;
use warnings;
use Benchmark qw(cmpthese);

my $COUNT = 1000;

sub doit_closed {
    my $cb = shift;
    $cb->();
}

sub doit_method {
    my $cb = shift;
    $cb->meth();
}

cmpthese(-1, {
    'closure' => sub {
        for my $i (1..$COUNT) {
            doit_closed(sub {
                $i;
            });
        }
    },
    'method' => sub {
        for my $i (1..$COUNT) {
            doit_method(Holder->new($i));
        }
    }
});

package Holder;

sub new {
    my ($class, $value) = @_;
    return bless {
        value => $value
    }, $class;
}

sub meth {
    my $self = shift;
    return $self->{value};
}

6 comments:

  1. Great info. I have been searching for this script for hours now. My search ends here, all the thanks to you. How to get free Instagram followers really fast

    ReplyDelete
  2. TutuApp is an outsider App Installation aide for Android and iOS. TutuApp underpins you in introducing protected and secure Jailbreak, Rooted applications without the issue of verifying your gadget.
    https://tutuapp.blog
    tutuapp
    tutuapp download
    tutuapp vip

    ReplyDelete
  3. Enjoyed studying this, very good stuff, thanks.โปรโมชั่นGclub ของทางทีมงานตอนนี้แจกฟรีโบนัส 50%
    เพียงแค่คุณสมัคร Gclub กับทางทีมงานของเราเพียงเท่านั้น
    ร่วมมาเป็นส่วนหนึ่งกับเว็บไซต์คาสิโนออนไลน์ของเราได้เลยค่ะ
    สมัครสล็อตออนไลน์ >>> goldenslot
    สนใจร่วมลงทุนกับเรา สมัครเอเย่น Gclub คลิ๊กได้เลย

    ReplyDelete

Note: Only a member of this blog may post a comment.