line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package IO::AIO::LoadLimited; |
2
|
|
|
|
|
|
|
|
3
|
3
|
|
|
3
|
|
198065
|
use common::sense; |
|
3
|
|
|
|
|
37
|
|
|
3
|
|
|
|
|
14
|
|
4
|
3
|
|
|
3
|
|
156
|
use base qw(Exporter); |
|
3
|
|
|
|
|
6
|
|
|
3
|
|
|
|
|
315
|
|
5
|
3
|
|
|
3
|
|
17
|
use Carp qw(croak); |
|
3
|
|
|
|
|
7
|
|
|
3
|
|
|
|
|
138
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
# IO:AIO Version 2 supports groups and requests objects |
8
|
3
|
|
|
3
|
|
532
|
use IO::AIO 2; |
|
3
|
|
|
|
|
3449
|
|
|
3
|
|
|
|
|
1613
|
|
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
our @EXPORT = qw(aio_load_limited); |
11
|
|
|
|
|
|
|
our $VERSION = '0.02'; |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
sub aio_load_limited(\@&$;$) { |
14
|
2
|
|
|
2
|
1
|
3666
|
my ($paths, $filecb, $grp_or_donecb, $limit) = @_; |
15
|
2
|
|
|
|
|
5
|
my $group; |
16
|
|
|
|
|
|
|
|
17
|
2
|
100
|
|
|
|
8
|
$limit = 10 unless defined $limit; |
18
|
|
|
|
|
|
|
|
19
|
2
|
100
|
|
|
|
16
|
if (ref($grp_or_donecb) eq 'CODE') { |
|
|
50
|
|
|
|
|
|
20
|
1
|
|
|
|
|
17
|
$group = aio_group $grp_or_donecb; |
21
|
|
|
|
|
|
|
} elsif (ref($grp_or_donecb) eq 'IO::AIO::GRP') { |
22
|
1
|
|
|
|
|
3
|
$group = $grp_or_donecb; |
23
|
|
|
|
|
|
|
} else { |
24
|
0
|
|
|
|
|
0
|
croak '3rd parameter must be a callback or IO::AIO::GRP'; |
25
|
|
|
|
|
|
|
} |
26
|
|
|
|
|
|
|
|
27
|
2
|
|
|
|
|
13
|
limit $group $limit; |
28
|
|
|
|
|
|
|
feed $group sub { |
29
|
1036
|
|
|
1036
|
|
9638
|
my $data; |
30
|
1036
|
100
|
|
|
|
3338
|
my $path = shift @$paths or return $group->result(1); |
31
|
1034
|
|
|
|
|
2740
|
my $pri = aioreq_pri; |
32
|
1034
|
50
|
|
|
|
7280
|
my $grp = aio_group sub { $filecb->( $_[0] >= 0 ? ($path, $data) : ($path, undef) )}; |
|
1034
|
|
|
|
|
4318
|
|
33
|
1034
|
|
|
|
|
4034
|
add $group $grp; |
34
|
|
|
|
|
|
|
|
35
|
1034
|
|
|
|
|
2838
|
aioreq_pri $pri; |
36
|
|
|
|
|
|
|
add $grp aio_open $path, IO::AIO::O_RDONLY, 0, sub { |
37
|
1034
|
50
|
|
|
|
5439
|
my $fh = shift or return $grp->result(-1); |
38
|
1034
|
|
|
|
|
3446
|
aioreq_pri $pri; |
39
|
1034
|
|
|
|
|
53049
|
add $grp aio_read $fh, 0, (-s $fh), $data, 0, sub { $grp->result($_[0]) }; |
|
1034
|
|
|
|
|
6462
|
|
40
|
1034
|
|
|
|
|
54458
|
}; |
41
|
2
|
|
|
|
|
28
|
}; |
42
|
|
|
|
|
|
|
}; |
43
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
1; |
45
|
|
|
|
|
|
|
|
46
|
|
|
|
|
|
|
__END__ |