Ivan Ratnikov > Coro-LocalScalar-XS > Coro::LocalScalar::XS

Download:
Coro-LocalScalar-XS-0.20.tar.gz

Dependencies

Annotate this POD

CPAN RT

Open  1
View/Report Bugs
Source  

NAME ^

Coro::LocalScalar::XS - Different scalar values in coroutines

ABOUT ^

This is optimized XS version of Coro::LocalScalar. It's almost two times faster and has simplier api - only one function. This module destroys all local data(and DESTROYs are called) when coroutine get destroyed. This is useful for example if you want to have global variable $request with different object in each coro.

Coro::LocalScalar::XS keeps reference to localized variable, so localize only variables, that will persist all execution time. Localizing hundreds of variables is also bad idea, because each variable adds little overhead when each coro is destroyed

SYNOPSIS ^

        use Coro;
        use Coro::EV;


        my $scalar;

        use Coro::LocalScalar::XS;
        localize($scalar); # $scalar is now different in all coros. Current value of $scalar is deleted.

        # $hash{element} = undef; # hash element MUST exist if you want to localize it correctly
        # localize($hash{element}); 
        # localizing arrays or hashes unsupported, use refs
        
        # or
        # use Coro::LocalScalar::XS qw//; # don't export localize
        # Coro::LocalScalar::XS->localize($scalar);

        async {
                        $scalar = "thread 1";
                        print "1 - $scalar\n";
                        cede;
                        print "3 - $scalar\n";
                        cede;
                        print "5 - $scalar\n";
                        
        };

        async {
                        $scalar = "thread 2";
                        print "2 - $scalar\n";
                        cede;
                        print "4 - $scalar\n";
                        cede;
                        print "6 - $scalar\n";
        };

        EV::loop;
        

        
        1 - thread 1
        2 - thread 2
        3 - thread 1
        4 - thread 2
        5 - thread 1
        6 - thread 2

BENCHMARK ^

         t/benchmark.pl
        
                                                        Rate Coro::LocalScalar Coro::LocalScalar::XS Coro::Localize
        Coro::LocalScalar     10000/s                --                  -45%           -52%
        Coro::LocalScalar::XS 18282/s               83%                    --           -12%
        Coro::Localize        20661/s              107%                   13%             --

Coro::Localize is little bit faster, but Coro::LocalScalar::XS allows localizing hash elements

syntax highlighting: