- 论坛徽章:
- 0
|
第一次用Coro,代码写得很搓,所以测试出来结果很糟糕。
- [yunshu@alisec ~]$ ./lwp.pl
- Benchmark: timing 20 iterations of Coro_cede, Coro_nocede, Single...
- coro cede: 6.49081897735596
- coro cede: 6.15217590332031
- coro cede: 6.05628800392151
- coro cede: 6.21107196807861
- coro cede: 6.00841999053955
- coro cede: 6.26581907272339
- coro cede: 6.17434310913086
- coro cede: 6.00813794136047
- coro cede: 6.1951699256897
- coro cede: 6.06605410575867
- coro cede: 5.94637799263
- coro cede: 6.03272008895874
- coro cede: 5.96221017837524
- coro cede: 6.13361597061157
- coro cede: 5.86121511459351
- coro cede: 6.28835797309875
- coro cede: 5.88967108726501
- coro cede: 6.08243489265442
- coro cede: 6.15819191932678
- coro cede: 6.04327797889709
- Coro_cede: 122 wallclock secs ( 5.32 usr + 0.60 sys = 5.92 CPU) @ 3.38/s (n=20)
- coro no cede: 9.09577894210815
- coro no cede: 6.05727195739746
- coro no cede: 5.76734018325806
- coro no cede: 9.02401900291443
- coro no cede: 5.81625485420227
- coro no cede: 5.86933517456055
- coro no cede: 5.99138998985291
- coro no cede: 6.11405181884766
- coro no cede: 5.76704406738281
- coro no cede: 6.13680291175842
- coro no cede: 8.82450413703918
- coro no cede: 6.01463413238525
- coro no cede: 6.02665209770203
- coro no cede: 6.03721284866333
- coro no cede: 5.83429312705994
- coro no cede: 6.11594295501709
- coro no cede: 5.95029497146606
- coro no cede: 6.00661706924438
- coro no cede: 5.88391184806824
- coro no cede: 6.03061604499817
- Coro_nocede: 128 wallclock secs ( 5.19 usr + 0.60 sys = 5.79 CPU) @ 3.45/s (n=20)
- single: 5.75780200958252
- single: 6.01135516166687
- single: 5.89875817298889
- single: 5.99776697158813
- single: 6.0035080909729
- single: 6.08962893486023
- single: 6.12317204475403
- single: 6.15343594551086
- single: 6.19344115257263
- single: 6.09869790077209
- single: 5.82484889030457
- single: 6.16173100471497
- single: 5.86830401420593
- single: 6.08909893035889
- single: 5.88979601860046
- single: 6.01710295677185
- single: 5.99976301193237
- single: 6.0466160774231
- single: 5.76599287986755
- single: 6.08541393280029
- Single: 120 wallclock secs ( 5.12 usr + 0.57 sys = 5.69 CPU) @ 3.51/s (n=20)
- Rate Coro_cede Coro_nocede Single
- Coro_cede 3.38/s -- -2% -4%
- Coro_nocede 3.45/s 2% -- -2%
- Single 3.51/s 4% 2% --
- [yunshu@alisec ~]$
复制代码
测试代码如下:
- #!/usr/bin/perl
- use strict;
- use warnings;
- use LWP::Simple;
- use Web::Scraper;
- use Coro;
- use Time::HiRes;
- use Benchmark qw(timethese cmpthese);
- my $scraper = scraper {
- process '//a', 'links[]' => '@href';
- };
- my $res = $scraper->scrape(URI->new('http://www.soso.com'));
- my @links = @{ $res->{links} };
- my $result = timethese(20, {
- Single => 'do_single',
- Coro_cede => 'do_coro',
- Coro_nocede => 'do_no_cede',
- });
- cmpthese($result);
- sub do_single {
- my $t = Time::HiRes::time;
- foreach my $link (@links) {
- my $content = get $link;
- }
- print "single: ", Time::HiRes::time - $t, "\n";
- }
- sub do_coro {
- my $t = Time::HiRes::time;
- my @coros = ( );
- foreach my $link (@links) {
- push( @coros,
- async {
- my $l = shift;
- cede;
- my $content = get $l;
- } $link
- );
- }
- cede;
- foreach (@coros) {
- $_->join();
- }
- print "coro cede: ", Time::HiRes::time - $t, "\n";
- }
- sub do_no_cede {
- my $t = Time::HiRes::time;
- my @coros = ( );
- foreach my $link (@links) {
- push( @coros,
- async {
- my $content = get $link;
- }
- );
- }
- foreach (@coros) {
- $_->join();
- }
- print "coro no cede: ", Time::HiRes::time - $t, "\n";
- }
复制代码 |
|