Coro-LocalScalar-XS

 view release on metacpan or  search on metacpan

t/benchmark.pl  view on Meta::CPAN

cmpthese(10000, {
        'Coro::LocalScalar' => sub { 
			my $scalar;
			Coro::LocalScalar->new->localize($scalar);
			
				async {
						$scalar = "thread 1";
						cede;
						die unless $scalar eq "thread 1";
						$scalar = "thread 1 rewrite";
						cede;
						die unless $scalar eq "thread 1 rewrite";
						
				};
				
				async {
						$scalar = "thread 2";
						cede;
						die unless $scalar eq "thread 2";
						$scalar = "thread 2 rewrite";
						cede;
						die unless $scalar eq "thread 2 rewrite";
				};
				
				cede;
				cede;
				cede;
		},
		
		'Coro::LocalScalar::XS' => sub { 
			my $scalar;
			Coro::LocalScalar::XS->localize($scalar);
			
				async {
						$scalar = "thread 1";
						cede;
						die unless $scalar eq "thread 1";
						$scalar = "thread 1 rewrite";
						cede;
						die unless $scalar eq "thread 1 rewrite";
						# warn 1;
				};
				
				async {
						$scalar = "thread 2";
						cede;
						die unless $scalar eq "thread 2";
						$scalar = "thread 2 rewrite";
						cede;
						die unless $scalar eq "thread 2 rewrite";
				};
				
				cede;
				cede;
				cede;
		},
		
        'Coro::Localize' => sub { 
				
				async {
						corolocal $cscalar = "thread 1";
						cede;
						die unless $cscalar eq "thread 1";
						$cscalar = "thread 1 rewrite";
						cede;
						die unless $cscalar eq "thread 1 rewrite";
						# warn 1;
				};
				
				async {
						corolocal $cscalar = "thread 2";
						cede;
						die unless $cscalar eq "thread 2";
						$cscalar = "thread 2 rewrite";
						cede;
						die unless $cscalar eq "thread 2 rewrite";
				};
				
				cede;
				cede;
				cede;
		},
    });



( run in 0.488 second using v1.01-cache-2.11-cpan-5a3173703d6 )