ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.73
Committed: Tue Oct 24 16:35:04 2006 UTC (17 years, 6 months ago) by root
Branch: MAIN
Changes since 1.72: +1 -7 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3     IO::AIO - Asynchronous Input/Output
4    
5     =head1 SYNOPSIS
6    
7     use IO::AIO;
8    
9 root 1.6 aio_open "/etc/passwd", O_RDONLY, 0, sub {
10     my ($fh) = @_;
11     ...
12     };
13    
14     aio_unlink "/tmp/file", sub { };
15    
16     aio_read $fh, 30000, 1024, $buffer, 0, sub {
17 root 1.8 $_[0] > 0 or die "read error: $!";
18 root 1.6 };
19    
20 root 1.56 # version 2+ has request and group objects
21     use IO::AIO 2;
22 root 1.52
23 root 1.68 aioreq_pri 4; # give next request a very high priority
24 root 1.52 my $req = aio_unlink "/tmp/file", sub { };
25     $req->cancel; # cancel request if still in queue
26    
27 root 1.56 my $grp = aio_group sub { print "all stats done\n" };
28     add $grp aio_stat "..." for ...;
29    
30     # AnyEvent integration
31 root 1.42 open my $fh, "<&=" . IO::AIO::poll_fileno or die "$!";
32     my $w = AnyEvent->io (fh => $fh, poll => 'r', cb => sub { IO::AIO::poll_cb });
33    
34 root 1.56 # Event integration
35 root 1.6 Event->io (fd => IO::AIO::poll_fileno,
36 root 1.7 poll => 'r',
37 root 1.6 cb => \&IO::AIO::poll_cb);
38    
39 root 1.56 # Glib/Gtk2 integration
40 root 1.6 add_watch Glib::IO IO::AIO::poll_fileno,
41 root 1.22 in => sub { IO::AIO::poll_cb; 1 };
42 root 1.6
43 root 1.56 # Tk integration
44 root 1.6 Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
45     readable => \&IO::AIO::poll_cb);
46    
47 root 1.56 # Danga::Socket integration
48 root 1.11 Danga::Socket->AddOtherFds (IO::AIO::poll_fileno =>
49     \&IO::AIO::poll_cb);
50    
51 root 1.1 =head1 DESCRIPTION
52    
53     This module implements asynchronous I/O using whatever means your
54 root 1.2 operating system supports.
55 root 1.1
56 root 1.72 In this version, a number of threads are started that execute your
57     requests and signal their completion. You don't need thread support
58     in perl, and the threads created by this module will not be visible
59     to perl. In the future, this module might make use of the native aio
60     functions available on many operating systems. However, they are often
61     not well-supported or restricted (Linux doesn't allow them on normal
62     files currently, for example), and they would only support aio_read and
63     aio_write, so the remaining functionality would have to be implemented
64     using threads anyway.
65    
66     Although the module will work with in the presence of other (Perl-)
67     threads, it is currently not reentrant in any way, so use appropriate
68     locking yourself, always call C<poll_cb> from within the same thread, or
69     never call C<poll_cb> (or other C<aio_> functions) recursively.
70    
71     =head1 REQUEST ANATOMY AND LIFETIME
72    
73     Every C<aio_*> function creates a request. which is a C data structure not
74     directly visible to Perl.
75    
76     If called in non-void context, every request function returns a Perl
77     object representing the request. In void context, nothing is returned,
78     which saves a bit of memory.
79    
80     The perl object is a fairly standard ref-to-hash object. The hash contents
81     are not used by IO::AIO so you are free to store anything you like in it.
82    
83     During their existance, aio requests travel through the following states,
84     in order:
85    
86     =over 4
87    
88     =item ready
89    
90     Immediately after a request is created it is put into the ready state,
91     waiting for a thread to execute it.
92    
93     =item execute
94    
95     A thread has accepted the request for processing and is currently
96     executing it (e.g. blocking in read).
97    
98     =item pending
99    
100     The request has been executed and is waiting for result processing.
101    
102     While request submission and execution is fully asynchronous, result
103     processing is not and relies on the perl interpreter calling C<poll_cb>
104     (or another function with the same effect).
105    
106     =item result
107    
108     The request results are processed synchronously by C<poll_cb>.
109    
110     The C<poll_cb> function will process all outstanding aio requests by
111     calling their callbacks, freeing memory associated with them and managing
112     any groups they are contained in.
113    
114     =item done
115    
116     Request has reached the end of its lifetime and holds no resources anymore
117     (except possibly for the Perl object, but its connection to the actual
118     aio request is severed and calling its methods will either do nothing or
119     result in a runtime error).
120 root 1.1
121     =cut
122    
123     package IO::AIO;
124    
125 root 1.23 no warnings;
126 root 1.51 use strict 'vars';
127 root 1.23
128 root 1.1 use base 'Exporter';
129    
130     BEGIN {
131 root 1.55 our $VERSION = '2.0';
132 root 1.1
133 root 1.67 our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close aio_stat
134     aio_lstat aio_unlink aio_rmdir aio_readdir aio_scandir aio_symlink
135     aio_fsync aio_fdatasync aio_readahead aio_rename aio_link aio_move
136     aio_group aio_nop);
137 root 1.70 our @EXPORT = (@AIO_REQ, qw(aioreq_pri aioreq_nice));
138 root 1.67 our @EXPORT_OK = qw(poll_fileno poll_cb poll_wait flush
139     min_parallel max_parallel max_outstanding nreqs);
140 root 1.1
141 root 1.54 @IO::AIO::GRP::ISA = 'IO::AIO::REQ';
142    
143 root 1.1 require XSLoader;
144 root 1.51 XSLoader::load ("IO::AIO", $VERSION);
145 root 1.1 }
146    
147 root 1.5 =head1 FUNCTIONS
148 root 1.1
149 root 1.5 =head2 AIO FUNCTIONS
150 root 1.1
151 root 1.5 All the C<aio_*> calls are more or less thin wrappers around the syscall
152     with the same name (sans C<aio_>). The arguments are similar or identical,
153 root 1.14 and they all accept an additional (and optional) C<$callback> argument
154     which must be a code reference. This code reference will get called with
155     the syscall return code (e.g. most syscalls return C<-1> on error, unlike
156     perl, which usually delivers "false") as it's sole argument when the given
157     syscall has been executed asynchronously.
158 root 1.1
159 root 1.23 All functions expecting a filehandle keep a copy of the filehandle
160     internally until the request has finished.
161 root 1.1
162 root 1.55 All requests return objects of type L<IO::AIO::REQ> that allow further
163     manipulation of those requests while they are in-flight.
164 root 1.52
165 root 1.28 The pathnames you pass to these routines I<must> be absolute and
166     encoded in byte form. The reason for the former is that at the time the
167     request is being executed, the current working directory could have
168     changed. Alternatively, you can make sure that you never change the
169     current working directory.
170    
171     To encode pathnames to byte form, either make sure you either: a)
172     always pass in filenames you got from outside (command line, readdir
173     etc.), b) are ASCII or ISO 8859-1, c) use the Encode module and encode
174     your pathnames to the locale (or other) encoding in effect in the user
175     environment, d) use Glib::filename_from_unicode on unicode filenames or e)
176     use something else.
177 root 1.1
178 root 1.5 =over 4
179 root 1.1
180 root 1.68 =item aioreq_pri $pri
181    
182     Sets the priority for the next aio request. The default priority
183     is C<0>, the minimum and maximum priorities are C<-4> and C<4>,
184     respectively. Requests with higher priority will be serviced first.
185    
186     The priority will be reset to C<0> after each call to one of the C<aio_>
187     functions.
188    
189 root 1.69 Example: open a file with low priority, then read something from it with
190     higher priority so the read request is serviced before other low priority
191     open requests (potentially spamming the cache):
192    
193     aioreq_pri -3;
194     aio_open ..., sub {
195     return unless $_[0];
196    
197     aioreq_pri -2;
198     aio_read $_[0], ..., sub {
199     ...
200     };
201     };
202    
203     =item aioreq_nice $pri_adjust
204    
205     Similar to C<aioreq_pri>, but subtracts the given value from the current
206     priority, so effects are cumulative.
207    
208 root 1.40 =item aio_open $pathname, $flags, $mode, $callback->($fh)
209 root 1.1
210 root 1.2 Asynchronously open or create a file and call the callback with a newly
211     created filehandle for the file.
212 root 1.1
213     The pathname passed to C<aio_open> must be absolute. See API NOTES, above,
214     for an explanation.
215    
216 root 1.20 The C<$flags> argument is a bitmask. See the C<Fcntl> module for a
217     list. They are the same as used by C<sysopen>.
218    
219     Likewise, C<$mode> specifies the mode of the newly created file, if it
220     didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>,
221     except that it is mandatory (i.e. use C<0> if you don't create new files,
222     and C<0666> or C<0777> if you do).
223 root 1.1
224     Example:
225    
226     aio_open "/etc/passwd", O_RDONLY, 0, sub {
227 root 1.2 if ($_[0]) {
228     print "open successful, fh is $_[0]\n";
229 root 1.1 ...
230     } else {
231     die "open failed: $!\n";
232     }
233     };
234    
235 root 1.40 =item aio_close $fh, $callback->($status)
236 root 1.1
237 root 1.2 Asynchronously close a file and call the callback with the result
238     code. I<WARNING:> although accepted, you should not pass in a perl
239 root 1.20 filehandle here, as perl will likely close the file descriptor another
240     time when the filehandle is destroyed. Normally, you can safely call perls
241     C<close> or just let filehandles go out of scope.
242    
243     This is supposed to be a bug in the API, so that might change. It's
244     therefore best to avoid this function.
245 root 1.1
246 root 1.40 =item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
247 root 1.1
248 root 1.40 =item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
249 root 1.1
250     Reads or writes C<length> bytes from the specified C<fh> and C<offset>
251     into the scalar given by C<data> and offset C<dataoffset> and calls the
252     callback without the actual number of bytes read (or -1 on error, just
253     like the syscall).
254    
255 root 1.31 The C<$data> scalar I<MUST NOT> be modified in any way while the request
256     is outstanding. Modifying it can result in segfaults or WW3 (if the
257     necessary/optional hardware is installed).
258    
259 root 1.17 Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at
260 root 1.1 offset C<0> within the scalar:
261    
262     aio_read $fh, 7, 15, $buffer, 0, sub {
263 root 1.9 $_[0] > 0 or die "read error: $!";
264     print "read $_[0] bytes: <$buffer>\n";
265 root 1.1 };
266    
267 root 1.50 =item aio_move $srcpath, $dstpath, $callback->($status)
268    
269 root 1.52 Try to move the I<file> (directories not supported as either source or
270     destination) from C<$srcpath> to C<$dstpath> and call the callback with
271     the C<0> (error) or C<-1> ok.
272 root 1.50
273     This is a composite request that tries to rename(2) the file first. If
274     rename files with C<EXDEV>, it creates the destination file with mode 0200
275     and copies the contents of the source file into it using C<aio_sendfile>,
276     followed by restoring atime, mtime, access mode and uid/gid, in that
277     order, and unlinking the C<$srcpath>.
278    
279     If an error occurs, the partial destination file will be unlinked, if
280     possible, except when setting atime, mtime, access mode and uid/gid, where
281     errors are being ignored.
282    
283     =cut
284    
285     sub aio_move($$$) {
286     my ($src, $dst, $cb) = @_;
287    
288 root 1.58 my $grp = aio_group $cb;
289 root 1.55
290     add $grp aio_rename $src, $dst, sub {
291 root 1.51 if ($_[0] && $! == EXDEV) {
292 root 1.55 add $grp aio_open $src, O_RDONLY, 0, sub {
293 root 1.50 if (my $src_fh = $_[0]) {
294     my @stat = stat $src_fh;
295    
296 root 1.55 add $grp aio_open $dst, O_WRONLY, 0200, sub {
297 root 1.50 if (my $dst_fh = $_[0]) {
298 root 1.55 add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub {
299 root 1.50 close $src_fh;
300    
301     if ($_[0] == $stat[7]) {
302     utime $stat[8], $stat[9], $dst;
303     chmod $stat[2] & 07777, $dst_fh;
304     chown $stat[4], $stat[5], $dst_fh;
305     close $dst_fh;
306    
307 root 1.55 add $grp aio_unlink $src, sub {
308 root 1.58 $grp->result ($_[0]);
309 root 1.50 };
310     } else {
311     my $errno = $!;
312 root 1.55 add $grp aio_unlink $dst, sub {
313 root 1.50 $! = $errno;
314 root 1.58 $grp->result (-1);
315 root 1.50 };
316     }
317     };
318     } else {
319 root 1.58 $grp->result (-1);
320 root 1.50 }
321     },
322    
323     } else {
324 root 1.58 $grp->result (-1);
325 root 1.50 }
326     };
327     } else {
328 root 1.58 $grp->result ($_[0]);
329 root 1.50 }
330     };
331 root 1.55
332     $grp
333 root 1.50 }
334    
335 root 1.40 =item aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
336 root 1.35
337     Tries to copy C<$length> bytes from C<$in_fh> to C<$out_fh>. It starts
338     reading at byte offset C<$in_offset>, and starts writing at the current
339     file offset of C<$out_fh>. Because of that, it is not safe to issue more
340     than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each
341     other.
342    
343     This call tries to make use of a native C<sendfile> syscall to provide
344     zero-copy operation. For this to work, C<$out_fh> should refer to a
345     socket, and C<$in_fh> should refer to mmap'able file.
346    
347     If the native sendfile call fails or is not implemented, it will be
348 root 1.36 emulated, so you can call C<aio_sendfile> on any type of filehandle
349     regardless of the limitations of the operating system.
350 root 1.35
351     Please note, however, that C<aio_sendfile> can read more bytes from
352     C<$in_fh> than are written, and there is no way to find out how many
353 root 1.36 bytes have been read from C<aio_sendfile> alone, as C<aio_sendfile> only
354     provides the number of bytes written to C<$out_fh>. Only if the result
355     value equals C<$length> one can assume that C<$length> bytes have been
356     read.
357 root 1.35
358 root 1.40 =item aio_readahead $fh,$offset,$length, $callback->($retval)
359 root 1.1
360 root 1.20 C<aio_readahead> populates the page cache with data from a file so that
361 root 1.1 subsequent reads from that file will not block on disk I/O. The C<$offset>
362     argument specifies the starting point from which data is to be read and
363     C<$length> specifies the number of bytes to be read. I/O is performed in
364     whole pages, so that offset is effectively rounded down to a page boundary
365     and bytes are read up to the next page boundary greater than or equal to
366 root 1.20 (off-set+length). C<aio_readahead> does not read beyond the end of the
367 root 1.1 file. The current file offset of the file is left unchanged.
368    
369 root 1.26 If that syscall doesn't exist (likely if your OS isn't Linux) it will be
370     emulated by simply reading the data, which would have a similar effect.
371    
372 root 1.40 =item aio_stat $fh_or_path, $callback->($status)
373 root 1.1
374 root 1.40 =item aio_lstat $fh, $callback->($status)
375 root 1.1
376     Works like perl's C<stat> or C<lstat> in void context. The callback will
377     be called after the stat and the results will be available using C<stat _>
378     or C<-s _> etc...
379    
380     The pathname passed to C<aio_stat> must be absolute. See API NOTES, above,
381     for an explanation.
382    
383     Currently, the stats are always 64-bit-stats, i.e. instead of returning an
384     error when stat'ing a large file, the results will be silently truncated
385     unless perl itself is compiled with large file support.
386    
387     Example: Print the length of F</etc/passwd>:
388    
389     aio_stat "/etc/passwd", sub {
390     $_[0] and die "stat failed: $!";
391     print "size is ", -s _, "\n";
392     };
393    
394 root 1.40 =item aio_unlink $pathname, $callback->($status)
395 root 1.1
396     Asynchronously unlink (delete) a file and call the callback with the
397     result code.
398    
399 root 1.50 =item aio_link $srcpath, $dstpath, $callback->($status)
400    
401     Asynchronously create a new link to the existing object at C<$srcpath> at
402     the path C<$dstpath> and call the callback with the result code.
403    
404     =item aio_symlink $srcpath, $dstpath, $callback->($status)
405    
406     Asynchronously create a new symbolic link to the existing object at C<$srcpath> at
407     the path C<$dstpath> and call the callback with the result code.
408    
409     =item aio_rename $srcpath, $dstpath, $callback->($status)
410    
411     Asynchronously rename the object at C<$srcpath> to C<$dstpath>, just as
412     rename(2) and call the callback with the result code.
413    
414 root 1.40 =item aio_rmdir $pathname, $callback->($status)
415 root 1.27
416     Asynchronously rmdir (delete) a directory and call the callback with the
417     result code.
418    
419 root 1.46 =item aio_readdir $pathname, $callback->($entries)
420 root 1.37
421     Unlike the POSIX call of the same name, C<aio_readdir> reads an entire
422     directory (i.e. opendir + readdir + closedir). The entries will not be
423     sorted, and will B<NOT> include the C<.> and C<..> entries.
424    
425     The callback a single argument which is either C<undef> or an array-ref
426     with the filenames.
427    
428 root 1.40 =item aio_scandir $path, $maxreq, $callback->($dirs, $nondirs)
429    
430 root 1.52 Scans a directory (similar to C<aio_readdir>) but additionally tries to
431     separate the entries of directory C<$path> into two sets of names, ones
432     you can recurse into (directories or links to them), and ones you cannot
433     recurse into (everything else).
434    
435 root 1.61 C<aio_scandir> is a composite request that creates of many sub requests_
436     C<$maxreq> specifies the maximum number of outstanding aio requests that
437     this function generates. If it is C<< <= 0 >>, then a suitable default
438     will be chosen (currently 6).
439 root 1.40
440     On error, the callback is called without arguments, otherwise it receives
441     two array-refs with path-relative entry names.
442    
443     Example:
444    
445     aio_scandir $dir, 0, sub {
446     my ($dirs, $nondirs) = @_;
447     print "real directories: @$dirs\n";
448     print "everything else: @$nondirs\n";
449     };
450    
451     Implementation notes.
452    
453     The C<aio_readdir> cannot be avoided, but C<stat()>'ing every entry can.
454    
455     After reading the directory, the modification time, size etc. of the
456 root 1.52 directory before and after the readdir is checked, and if they match (and
457     isn't the current time), the link count will be used to decide how many
458     entries are directories (if >= 2). Otherwise, no knowledge of the number
459     of subdirectories will be assumed.
460    
461     Then entries will be sorted into likely directories (everything without
462     a non-initial dot currently) and likely non-directories (everything
463     else). Then every entry plus an appended C</.> will be C<stat>'ed,
464     likely directories first. If that succeeds, it assumes that the entry
465     is a directory or a symlink to directory (which will be checked
466     seperately). This is often faster than stat'ing the entry itself because
467     filesystems might detect the type of the entry without reading the inode
468     data (e.g. ext2fs filetype feature).
469    
470     If the known number of directories (link count - 2) has been reached, the
471     rest of the entries is assumed to be non-directories.
472    
473     This only works with certainty on POSIX (= UNIX) filesystems, which
474     fortunately are the vast majority of filesystems around.
475    
476     It will also likely work on non-POSIX filesystems with reduced efficiency
477     as those tend to return 0 or 1 as link counts, which disables the
478     directory counting heuristic.
479 root 1.40
480     =cut
481    
482     sub aio_scandir($$$) {
483     my ($path, $maxreq, $cb) = @_;
484    
485 root 1.58 my $grp = aio_group $cb;
486 root 1.55
487 root 1.61 $maxreq = 6 if $maxreq <= 0;
488 root 1.40
489     # stat once
490 root 1.55 add $grp aio_stat $path, sub {
491 root 1.58 return $grp->result () if $_[0];
492 root 1.52 my $now = time;
493 root 1.40 my $hash1 = join ":", (stat _)[0,1,3,7,9];
494    
495     # read the directory entries
496 root 1.55 add $grp aio_readdir $path, sub {
497 root 1.40 my $entries = shift
498 root 1.58 or return $grp->result ();
499 root 1.40
500     # stat the dir another time
501 root 1.55 add $grp aio_stat $path, sub {
502 root 1.40 my $hash2 = join ":", (stat _)[0,1,3,7,9];
503    
504     my $ndirs;
505    
506     # take the slow route if anything looks fishy
507 root 1.52 if ($hash1 ne $hash2 or (stat _)[9] == $now) {
508 root 1.40 $ndirs = -1;
509     } else {
510     # if nlink == 2, we are finished
511     # on non-posix-fs's, we rely on nlink < 2
512     $ndirs = (stat _)[3] - 2
513 root 1.58 or return $grp->result ([], $entries);
514 root 1.40 }
515    
516     # sort into likely dirs and likely nondirs
517     # dirs == files without ".", short entries first
518     $entries = [map $_->[0],
519     sort { $b->[1] cmp $a->[1] }
520     map [$_, sprintf "%s%04d", (/.\./ ? "1" : "0"), length],
521     @$entries];
522    
523     my (@dirs, @nondirs);
524    
525     my ($statcb, $schedcb);
526     my $nreq = 0;
527    
528 root 1.60 my $statgrp = add $grp aio_group;
529    
530 root 1.40 $schedcb = sub {
531     if (@$entries) {
532     if ($nreq < $maxreq) {
533     my $ent = pop @$entries;
534     $nreq++;
535 root 1.60 add $statgrp aio_stat "$path/$ent/.", sub { $statcb->($_[0], $ent) };
536 root 1.40 }
537     } elsif (!$nreq) {
538     # finished
539 root 1.60 $statgrp->cancel;
540 root 1.40 undef $statcb;
541     undef $schedcb;
542 root 1.60 $grp->result (\@dirs, \@nondirs);
543 root 1.40 }
544     };
545     $statcb = sub {
546     my ($status, $entry) = @_;
547    
548     if ($status < 0) {
549     $nreq--;
550     push @nondirs, $entry;
551     &$schedcb;
552     } else {
553     # need to check for real directory
554 root 1.55 add $grp aio_lstat "$path/$entry", sub {
555 root 1.40 $nreq--;
556    
557     if (-d _) {
558     push @dirs, $entry;
559    
560     if (!--$ndirs) {
561     push @nondirs, @$entries;
562     $entries = [];
563     }
564     } else {
565     push @nondirs, $entry;
566     }
567    
568     &$schedcb;
569     }
570     }
571     };
572    
573     &$schedcb while @$entries && $nreq < $maxreq;
574     };
575     };
576     };
577 root 1.55
578     $grp
579 root 1.40 }
580    
581     =item aio_fsync $fh, $callback->($status)
582 root 1.1
583     Asynchronously call fsync on the given filehandle and call the callback
584     with the fsync result code.
585    
586 root 1.40 =item aio_fdatasync $fh, $callback->($status)
587 root 1.1
588     Asynchronously call fdatasync on the given filehandle and call the
589 root 1.26 callback with the fdatasync result code.
590    
591     If this call isn't available because your OS lacks it or it couldn't be
592     detected, it will be emulated by calling C<fsync> instead.
593 root 1.1
594 root 1.58 =item aio_group $callback->(...)
595 root 1.54
596 root 1.55 [EXPERIMENTAL]
597    
598     This is a very special aio request: Instead of doing something, it is a
599     container for other aio requests, which is useful if you want to bundle
600 root 1.71 many requests into a single, composite, request with a definite callback
601     and the ability to cancel the whole request with its subrequests.
602 root 1.55
603     Returns an object of class L<IO::AIO::GRP>. See its documentation below
604     for more info.
605    
606     Example:
607    
608     my $grp = aio_group sub {
609     print "all stats done\n";
610     };
611    
612     add $grp
613     (aio_stat ...),
614     (aio_stat ...),
615     ...;
616    
617 root 1.63 =item aio_nop $callback->()
618    
619     This is a special request - it does nothing in itself and is only used for
620     side effects, such as when you want to add a dummy request to a group so
621     that finishing the requests in the group depends on executing the given
622     code.
623    
624 root 1.64 While this request does nothing, it still goes through the execution
625     phase and still requires a worker thread. Thus, the callback will not
626     be executed immediately but only after other requests in the queue have
627     entered their execution phase. This can be used to measure request
628     latency.
629    
630 root 1.71 =item IO::AIO::aio_busy $fractional_seconds, $callback->() *NOT EXPORTED*
631 root 1.54
632     Mainly used for debugging and benchmarking, this aio request puts one of
633     the request workers to sleep for the given time.
634    
635 root 1.56 While it is theoretically handy to have simple I/O scheduling requests
636 root 1.71 like sleep and file handle readable/writable, the overhead this creates is
637     immense (it blocks a thread for a long time) so do not use this function
638     except to put your application under artificial I/O pressure.
639 root 1.56
640 root 1.5 =back
641    
642 root 1.53 =head2 IO::AIO::REQ CLASS
643 root 1.52
644     All non-aggregate C<aio_*> functions return an object of this class when
645     called in non-void context.
646    
647     =over 4
648    
649 root 1.65 =item cancel $req
650 root 1.52
651     Cancels the request, if possible. Has the effect of skipping execution
652     when entering the B<execute> state and skipping calling the callback when
653     entering the the B<result> state, but will leave the request otherwise
654     untouched. That means that requests that currently execute will not be
655     stopped and resources held by the request will not be freed prematurely.
656    
657 root 1.65 =item cb $req $callback->(...)
658    
659     Replace (or simply set) the callback registered to the request.
660    
661 root 1.52 =back
662    
663 root 1.55 =head2 IO::AIO::GRP CLASS
664    
665     This class is a subclass of L<IO::AIO::REQ>, so all its methods apply to
666     objects of this class, too.
667    
668     A IO::AIO::GRP object is a special request that can contain multiple other
669     aio requests.
670    
671     You create one by calling the C<aio_group> constructing function with a
672     callback that will be called when all contained requests have entered the
673     C<done> state:
674    
675     my $grp = aio_group sub {
676     print "all requests are done\n";
677     };
678    
679     You add requests by calling the C<add> method with one or more
680     C<IO::AIO::REQ> objects:
681    
682     $grp->add (aio_unlink "...");
683    
684 root 1.58 add $grp aio_stat "...", sub {
685     $_[0] or return $grp->result ("error");
686    
687     # add another request dynamically, if first succeeded
688     add $grp aio_open "...", sub {
689     $grp->result ("ok");
690     };
691     };
692 root 1.55
693     This makes it very easy to create composite requests (see the source of
694     C<aio_move> for an application) that work and feel like simple requests.
695    
696 root 1.62 =over 4
697    
698     =item * The IO::AIO::GRP objects will be cleaned up during calls to
699 root 1.55 C<IO::AIO::poll_cb>, just like any other request.
700    
701 root 1.62 =item * They can be canceled like any other request. Canceling will cancel not
702 root 1.59 only the request itself, but also all requests it contains.
703 root 1.55
704 root 1.62 =item * They can also can also be added to other IO::AIO::GRP objects.
705 root 1.55
706 root 1.62 =item * You must not add requests to a group from within the group callback (or
707 root 1.60 any later time).
708    
709 root 1.62 =item * This does not harmonise well with C<max_outstanding>, so best do
710     not combine C<aio_group> with it. Groups and feeders are recommended for
711     this kind of concurrency-limiting.
712    
713     =back
714    
715 root 1.55 Their lifetime, simplified, looks like this: when they are empty, they
716     will finish very quickly. If they contain only requests that are in the
717     C<done> state, they will also finish. Otherwise they will continue to
718     exist.
719    
720 root 1.57 That means after creating a group you have some time to add requests. And
721     in the callbacks of those requests, you can add further requests to the
722     group. And only when all those requests have finished will the the group
723     itself finish.
724    
725 root 1.55 =over 4
726    
727 root 1.65 =item add $grp ...
728    
729 root 1.55 =item $grp->add (...)
730    
731 root 1.57 Add one or more requests to the group. Any type of L<IO::AIO::REQ> can
732     be added, including other groups, as long as you do not create circular
733     dependencies.
734    
735     Returns all its arguments.
736 root 1.55
737 root 1.58 =item $grp->result (...)
738    
739     Set the result value(s) that will be passed to the group callback when all
740     subrequests have finished. By default, no argument will be passed.
741    
742 root 1.65 =item feed $grp $callback->($grp)
743 root 1.60
744     [VERY EXPERIMENTAL]
745    
746     Sets a feeder/generator on this group: every group can have an attached
747     generator that generates requests if idle. The idea behind this is that,
748     although you could just queue as many requests as you want in a group,
749     this might starve other requests for a potentially long time. For
750     example, C<aio_scandir> might generate hundreds of thousands C<aio_stat>
751     requests, delaying any later requests for a long time.
752    
753     To avoid this, and allow incremental generation of requests, you can
754     instead a group and set a feeder on it that generates those requests. The
755 root 1.68 feed callback will be called whenever there are few enough (see C<limit>,
756 root 1.60 below) requests active in the group itself and is expected to queue more
757     requests.
758    
759 root 1.68 The feed callback can queue as many requests as it likes (i.e. C<add> does
760     not impose any limits).
761 root 1.60
762 root 1.65 If the feed does not queue more requests when called, it will be
763 root 1.60 automatically removed from the group.
764    
765 root 1.65 If the feed limit is C<0>, it will be set to C<2> automatically.
766 root 1.60
767     Example:
768    
769     # stat all files in @files, but only ever use four aio requests concurrently:
770    
771     my $grp = aio_group sub { print "finished\n" };
772 root 1.68 limit $grp 4;
773 root 1.65 feed $grp sub {
774 root 1.60 my $file = pop @files
775     or return;
776    
777     add $grp aio_stat $file, sub { ... };
778 root 1.65 };
779 root 1.60
780 root 1.68 =item limit $grp $num
781 root 1.60
782     Sets the feeder limit for the group: The feeder will be called whenever
783     the group contains less than this many requests.
784    
785     Setting the limit to C<0> will pause the feeding process.
786    
787 root 1.55 =back
788    
789 root 1.5 =head2 SUPPORT FUNCTIONS
790    
791     =over 4
792    
793     =item $fileno = IO::AIO::poll_fileno
794    
795 root 1.20 Return the I<request result pipe file descriptor>. This filehandle must be
796     polled for reading by some mechanism outside this module (e.g. Event or
797     select, see below or the SYNOPSIS). If the pipe becomes readable you have
798     to call C<poll_cb> to check the results.
799 root 1.5
800     See C<poll_cb> for an example.
801    
802     =item IO::AIO::poll_cb
803    
804     Process all outstanding events on the result pipe. You have to call this
805     regularly. Returns the number of events processed. Returns immediately
806     when no events are outstanding.
807    
808 root 1.20 Example: Install an Event watcher that automatically calls
809     IO::AIO::poll_cb with high priority:
810 root 1.5
811     Event->io (fd => IO::AIO::poll_fileno,
812     poll => 'r', async => 1,
813     cb => \&IO::AIO::poll_cb);
814    
815     =item IO::AIO::poll_wait
816    
817     Wait till the result filehandle becomes ready for reading (simply does a
818 root 1.20 C<select> on the filehandle. This is useful if you want to synchronously wait
819 root 1.5 for some requests to finish).
820    
821     See C<nreqs> for an example.
822    
823     =item IO::AIO::nreqs
824    
825 root 1.20 Returns the number of requests currently outstanding (i.e. for which their
826     callback has not been invoked yet).
827 root 1.5
828     Example: wait till there are no outstanding requests anymore:
829    
830     IO::AIO::poll_wait, IO::AIO::poll_cb
831     while IO::AIO::nreqs;
832    
833 root 1.12 =item IO::AIO::flush
834    
835     Wait till all outstanding AIO requests have been handled.
836    
837 root 1.13 Strictly equivalent to:
838    
839     IO::AIO::poll_wait, IO::AIO::poll_cb
840     while IO::AIO::nreqs;
841    
842     =item IO::AIO::poll
843    
844     Waits until some requests have been handled.
845    
846     Strictly equivalent to:
847    
848     IO::AIO::poll_wait, IO::AIO::poll_cb
849     if IO::AIO::nreqs;
850    
851 root 1.5 =item IO::AIO::min_parallel $nthreads
852    
853 root 1.61 Set the minimum number of AIO threads to C<$nthreads>. The current
854     default is C<8>, which means eight asynchronous operations can execute
855     concurrently at any one time (the number of outstanding requests,
856     however, is unlimited).
857 root 1.5
858 root 1.34 IO::AIO starts threads only on demand, when an AIO request is queued and
859     no free thread exists.
860    
861 root 1.61 It is recommended to keep the number of threads relatively low, as some
862     Linux kernel versions will scale negatively with the number of threads
863     (higher parallelity => MUCH higher latency). With current Linux 2.6
864     versions, 4-32 threads should be fine.
865 root 1.5
866 root 1.34 Under most circumstances you don't need to call this function, as the
867     module selects a default that is suitable for low to moderate load.
868 root 1.5
869     =item IO::AIO::max_parallel $nthreads
870    
871 root 1.34 Sets the maximum number of AIO threads to C<$nthreads>. If more than the
872     specified number of threads are currently running, this function kills
873     them. This function blocks until the limit is reached.
874    
875     While C<$nthreads> are zero, aio requests get queued but not executed
876     until the number of threads has been increased again.
877 root 1.5
878     This module automatically runs C<max_parallel 0> at program end, to ensure
879     that all threads are killed and that there are no outstanding requests.
880    
881     Under normal circumstances you don't need to call this function.
882    
883     =item $oldnreqs = IO::AIO::max_outstanding $nreqs
884    
885 root 1.62 [DEPRECATED]
886    
887 root 1.5 Sets the maximum number of outstanding requests to C<$nreqs>. If you
888     try to queue up more than this number of requests, the caller will block until
889     some requests have been handled.
890    
891     The default is very large, so normally there is no practical limit. If you
892 root 1.34 queue up many requests in a loop it often improves speed if you set
893 root 1.5 this to a relatively low number, such as C<100>.
894    
895 root 1.62 This function does not work well together with C<aio_group>'s, and their
896     feeder interface is better suited to limiting concurrency, so do not use
897     this function.
898    
899 root 1.5 Under normal circumstances you don't need to call this function.
900    
901     =back
902    
903 root 1.1 =cut
904    
905 root 1.2 # support function to convert a fd into a perl filehandle
906     sub _fd2fh {
907     return undef if $_[0] < 0;
908    
909 root 1.23 # try to generate nice filehandles
910     my $sym = "IO::AIO::fd#$_[0]";
911     local *$sym;
912 root 1.25
913 root 1.27 open *$sym, "+<&=$_[0]" # usually works under any unix
914     or open *$sym, "<&=$_[0]" # cygwin needs this
915     or open *$sym, ">&=$_[0]" # or this
916 root 1.2 or return undef;
917    
918 root 1.23 *$sym
919 root 1.2 }
920    
921 root 1.61 min_parallel 8;
922 root 1.1
923     END {
924     max_parallel 0;
925     }
926    
927     1;
928    
929 root 1.27 =head2 FORK BEHAVIOUR
930    
931 root 1.52 This module should do "the right thing" when the process using it forks:
932    
933 root 1.34 Before the fork, IO::AIO enters a quiescent state where no requests
934     can be added in other threads and no results will be processed. After
935     the fork the parent simply leaves the quiescent state and continues
936 root 1.72 request/result processing, while the child frees the request/result queue
937     (so that the requests started before the fork will only be handled in the
938     parent). Threads will be started on demand until the limit set in the
939 root 1.34 parent process has been reached again.
940 root 1.27
941 root 1.52 In short: the parent will, after a short pause, continue as if fork had
942     not been called, while the child will act as if IO::AIO has not been used
943     yet.
944    
945 root 1.60 =head2 MEMORY USAGE
946    
947 root 1.72 Per-request usage:
948    
949     Each aio request uses - depending on your architecture - around 100-200
950     bytes of memory. In addition, stat requests need a stat buffer (possibly
951     a few hundred bytes), readdir requires a result buffer and so on. Perl
952     scalars and other data passed into aio requests will also be locked and
953     will consume memory till the request has entered the done state.
954 root 1.60
955     This is now awfully much, so queuing lots of requests is not usually a
956     problem.
957    
958 root 1.72 Per-thread usage:
959    
960     In the execution phase, some aio requests require more memory for
961     temporary buffers, and each thread requires a stack and other data
962     structures (usually around 16k-128k, depending on the OS).
963    
964     =head1 KNOWN BUGS
965    
966 root 1.73 Known bugs will be fixed in the next release.
967 root 1.60
968 root 1.1 =head1 SEE ALSO
969    
970 root 1.68 L<Coro::AIO>.
971 root 1.1
972     =head1 AUTHOR
973    
974     Marc Lehmann <schmorp@schmorp.de>
975     http://home.schmorp.de/
976    
977     =cut
978