ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.74
Committed: Tue Oct 24 17:22:17 2006 UTC (17 years, 6 months ago) by root
Branch: MAIN
Changes since 1.73: +28 -47 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 root 1.74 my $statgrp = add $grp aio_group sub {
526     $grp->result (\@dirs, \@nondirs);
527 root 1.40 };
528    
529 root 1.74 limit $statgrp $maxreq;
530     feed $statgrp sub {
531     return unless @$entries;
532     my $entry = pop @$entries;
533    
534     add $statgrp aio_stat "$path/$entry/.", sub {
535     if ($_[0] < 0) {
536     push @nondirs, $entry;
537     } else {
538     # need to check for real directory
539     add $statgrp aio_lstat "$path/$entry", sub {
540     if (-d _) {
541     push @dirs, $entry;
542    
543     if (!--$ndirs) {
544     push @nondirs, @$entries;
545     $statgrp->cancel_subs;
546     }
547     } else {
548     push @nondirs, $entry;
549 root 1.40 }
550     }
551     }
552 root 1.74 };
553 root 1.40 };
554     };
555     };
556     };
557 root 1.55
558     $grp
559 root 1.40 }
560    
561     =item aio_fsync $fh, $callback->($status)
562 root 1.1
563     Asynchronously call fsync on the given filehandle and call the callback
564     with the fsync result code.
565    
566 root 1.40 =item aio_fdatasync $fh, $callback->($status)
567 root 1.1
568     Asynchronously call fdatasync on the given filehandle and call the
569 root 1.26 callback with the fdatasync result code.
570    
571     If this call isn't available because your OS lacks it or it couldn't be
572     detected, it will be emulated by calling C<fsync> instead.
573 root 1.1
574 root 1.58 =item aio_group $callback->(...)
575 root 1.54
576 root 1.55 This is a very special aio request: Instead of doing something, it is a
577     container for other aio requests, which is useful if you want to bundle
578 root 1.71 many requests into a single, composite, request with a definite callback
579     and the ability to cancel the whole request with its subrequests.
580 root 1.55
581     Returns an object of class L<IO::AIO::GRP>. See its documentation below
582     for more info.
583    
584     Example:
585    
586     my $grp = aio_group sub {
587     print "all stats done\n";
588     };
589    
590     add $grp
591     (aio_stat ...),
592     (aio_stat ...),
593     ...;
594    
595 root 1.63 =item aio_nop $callback->()
596    
597     This is a special request - it does nothing in itself and is only used for
598     side effects, such as when you want to add a dummy request to a group so
599     that finishing the requests in the group depends on executing the given
600     code.
601    
602 root 1.64 While this request does nothing, it still goes through the execution
603     phase and still requires a worker thread. Thus, the callback will not
604     be executed immediately but only after other requests in the queue have
605     entered their execution phase. This can be used to measure request
606     latency.
607    
608 root 1.71 =item IO::AIO::aio_busy $fractional_seconds, $callback->() *NOT EXPORTED*
609 root 1.54
610     Mainly used for debugging and benchmarking, this aio request puts one of
611     the request workers to sleep for the given time.
612    
613 root 1.56 While it is theoretically handy to have simple I/O scheduling requests
614 root 1.71 like sleep and file handle readable/writable, the overhead this creates is
615     immense (it blocks a thread for a long time) so do not use this function
616     except to put your application under artificial I/O pressure.
617 root 1.56
618 root 1.5 =back
619    
620 root 1.53 =head2 IO::AIO::REQ CLASS
621 root 1.52
622     All non-aggregate C<aio_*> functions return an object of this class when
623     called in non-void context.
624    
625     =over 4
626    
627 root 1.65 =item cancel $req
628 root 1.52
629     Cancels the request, if possible. Has the effect of skipping execution
630     when entering the B<execute> state and skipping calling the callback when
631     entering the the B<result> state, but will leave the request otherwise
632     untouched. That means that requests that currently execute will not be
633     stopped and resources held by the request will not be freed prematurely.
634    
635 root 1.65 =item cb $req $callback->(...)
636    
637     Replace (or simply set) the callback registered to the request.
638    
639 root 1.52 =back
640    
641 root 1.55 =head2 IO::AIO::GRP CLASS
642    
643     This class is a subclass of L<IO::AIO::REQ>, so all its methods apply to
644     objects of this class, too.
645    
646     A IO::AIO::GRP object is a special request that can contain multiple other
647     aio requests.
648    
649     You create one by calling the C<aio_group> constructing function with a
650     callback that will be called when all contained requests have entered the
651     C<done> state:
652    
653     my $grp = aio_group sub {
654     print "all requests are done\n";
655     };
656    
657     You add requests by calling the C<add> method with one or more
658     C<IO::AIO::REQ> objects:
659    
660     $grp->add (aio_unlink "...");
661    
662 root 1.58 add $grp aio_stat "...", sub {
663     $_[0] or return $grp->result ("error");
664    
665     # add another request dynamically, if first succeeded
666     add $grp aio_open "...", sub {
667     $grp->result ("ok");
668     };
669     };
670 root 1.55
671     This makes it very easy to create composite requests (see the source of
672     C<aio_move> for an application) that work and feel like simple requests.
673    
674 root 1.62 =over 4
675    
676     =item * The IO::AIO::GRP objects will be cleaned up during calls to
677 root 1.55 C<IO::AIO::poll_cb>, just like any other request.
678    
679 root 1.62 =item * They can be canceled like any other request. Canceling will cancel not
680 root 1.59 only the request itself, but also all requests it contains.
681 root 1.55
682 root 1.62 =item * They can also can also be added to other IO::AIO::GRP objects.
683 root 1.55
684 root 1.62 =item * You must not add requests to a group from within the group callback (or
685 root 1.60 any later time).
686    
687 root 1.62 =item * This does not harmonise well with C<max_outstanding>, so best do
688     not combine C<aio_group> with it. Groups and feeders are recommended for
689     this kind of concurrency-limiting.
690    
691     =back
692    
693 root 1.55 Their lifetime, simplified, looks like this: when they are empty, they
694     will finish very quickly. If they contain only requests that are in the
695     C<done> state, they will also finish. Otherwise they will continue to
696     exist.
697    
698 root 1.57 That means after creating a group you have some time to add requests. And
699     in the callbacks of those requests, you can add further requests to the
700     group. And only when all those requests have finished will the the group
701     itself finish.
702    
703 root 1.55 =over 4
704    
705 root 1.65 =item add $grp ...
706    
707 root 1.55 =item $grp->add (...)
708    
709 root 1.57 Add one or more requests to the group. Any type of L<IO::AIO::REQ> can
710     be added, including other groups, as long as you do not create circular
711     dependencies.
712    
713     Returns all its arguments.
714 root 1.55
715 root 1.74 =item $grp->cancel_subs
716    
717     Cancel all subrequests and clears any feeder, but not the group request
718     itself. Useful when you queued a lot of events but got a result early.
719    
720 root 1.58 =item $grp->result (...)
721    
722     Set the result value(s) that will be passed to the group callback when all
723     subrequests have finished. By default, no argument will be passed.
724    
725 root 1.65 =item feed $grp $callback->($grp)
726 root 1.60
727     Sets a feeder/generator on this group: every group can have an attached
728     generator that generates requests if idle. The idea behind this is that,
729     although you could just queue as many requests as you want in a group,
730     this might starve other requests for a potentially long time. For
731     example, C<aio_scandir> might generate hundreds of thousands C<aio_stat>
732     requests, delaying any later requests for a long time.
733    
734     To avoid this, and allow incremental generation of requests, you can
735     instead a group and set a feeder on it that generates those requests. The
736 root 1.68 feed callback will be called whenever there are few enough (see C<limit>,
737 root 1.60 below) requests active in the group itself and is expected to queue more
738     requests.
739    
740 root 1.68 The feed callback can queue as many requests as it likes (i.e. C<add> does
741     not impose any limits).
742 root 1.60
743 root 1.65 If the feed does not queue more requests when called, it will be
744 root 1.60 automatically removed from the group.
745    
746 root 1.65 If the feed limit is C<0>, it will be set to C<2> automatically.
747 root 1.60
748     Example:
749    
750     # stat all files in @files, but only ever use four aio requests concurrently:
751    
752     my $grp = aio_group sub { print "finished\n" };
753 root 1.68 limit $grp 4;
754 root 1.65 feed $grp sub {
755 root 1.60 my $file = pop @files
756     or return;
757    
758     add $grp aio_stat $file, sub { ... };
759 root 1.65 };
760 root 1.60
761 root 1.68 =item limit $grp $num
762 root 1.60
763     Sets the feeder limit for the group: The feeder will be called whenever
764     the group contains less than this many requests.
765    
766     Setting the limit to C<0> will pause the feeding process.
767    
768 root 1.55 =back
769    
770 root 1.5 =head2 SUPPORT FUNCTIONS
771    
772     =over 4
773    
774     =item $fileno = IO::AIO::poll_fileno
775    
776 root 1.20 Return the I<request result pipe file descriptor>. This filehandle must be
777     polled for reading by some mechanism outside this module (e.g. Event or
778     select, see below or the SYNOPSIS). If the pipe becomes readable you have
779     to call C<poll_cb> to check the results.
780 root 1.5
781     See C<poll_cb> for an example.
782    
783     =item IO::AIO::poll_cb
784    
785     Process all outstanding events on the result pipe. You have to call this
786     regularly. Returns the number of events processed. Returns immediately
787     when no events are outstanding.
788    
789 root 1.20 Example: Install an Event watcher that automatically calls
790     IO::AIO::poll_cb with high priority:
791 root 1.5
792     Event->io (fd => IO::AIO::poll_fileno,
793     poll => 'r', async => 1,
794     cb => \&IO::AIO::poll_cb);
795    
796     =item IO::AIO::poll_wait
797    
798     Wait till the result filehandle becomes ready for reading (simply does a
799 root 1.20 C<select> on the filehandle. This is useful if you want to synchronously wait
800 root 1.5 for some requests to finish).
801    
802     See C<nreqs> for an example.
803    
804     =item IO::AIO::nreqs
805    
806 root 1.20 Returns the number of requests currently outstanding (i.e. for which their
807     callback has not been invoked yet).
808 root 1.5
809     Example: wait till there are no outstanding requests anymore:
810    
811     IO::AIO::poll_wait, IO::AIO::poll_cb
812     while IO::AIO::nreqs;
813    
814 root 1.12 =item IO::AIO::flush
815    
816     Wait till all outstanding AIO requests have been handled.
817    
818 root 1.13 Strictly equivalent to:
819    
820     IO::AIO::poll_wait, IO::AIO::poll_cb
821     while IO::AIO::nreqs;
822    
823     =item IO::AIO::poll
824    
825     Waits until some requests have been handled.
826    
827     Strictly equivalent to:
828    
829     IO::AIO::poll_wait, IO::AIO::poll_cb
830     if IO::AIO::nreqs;
831    
832 root 1.5 =item IO::AIO::min_parallel $nthreads
833    
834 root 1.61 Set the minimum number of AIO threads to C<$nthreads>. The current
835     default is C<8>, which means eight asynchronous operations can execute
836     concurrently at any one time (the number of outstanding requests,
837     however, is unlimited).
838 root 1.5
839 root 1.34 IO::AIO starts threads only on demand, when an AIO request is queued and
840     no free thread exists.
841    
842 root 1.61 It is recommended to keep the number of threads relatively low, as some
843     Linux kernel versions will scale negatively with the number of threads
844     (higher parallelity => MUCH higher latency). With current Linux 2.6
845     versions, 4-32 threads should be fine.
846 root 1.5
847 root 1.34 Under most circumstances you don't need to call this function, as the
848     module selects a default that is suitable for low to moderate load.
849 root 1.5
850     =item IO::AIO::max_parallel $nthreads
851    
852 root 1.34 Sets the maximum number of AIO threads to C<$nthreads>. If more than the
853     specified number of threads are currently running, this function kills
854     them. This function blocks until the limit is reached.
855    
856     While C<$nthreads> are zero, aio requests get queued but not executed
857     until the number of threads has been increased again.
858 root 1.5
859     This module automatically runs C<max_parallel 0> at program end, to ensure
860     that all threads are killed and that there are no outstanding requests.
861    
862     Under normal circumstances you don't need to call this function.
863    
864     =item $oldnreqs = IO::AIO::max_outstanding $nreqs
865    
866 root 1.62 [DEPRECATED]
867    
868 root 1.5 Sets the maximum number of outstanding requests to C<$nreqs>. If you
869     try to queue up more than this number of requests, the caller will block until
870     some requests have been handled.
871    
872     The default is very large, so normally there is no practical limit. If you
873 root 1.34 queue up many requests in a loop it often improves speed if you set
874 root 1.5 this to a relatively low number, such as C<100>.
875    
876 root 1.62 This function does not work well together with C<aio_group>'s, and their
877     feeder interface is better suited to limiting concurrency, so do not use
878     this function.
879    
880 root 1.5 Under normal circumstances you don't need to call this function.
881    
882     =back
883    
884 root 1.1 =cut
885    
886 root 1.2 # support function to convert a fd into a perl filehandle
887     sub _fd2fh {
888     return undef if $_[0] < 0;
889    
890 root 1.23 # try to generate nice filehandles
891     my $sym = "IO::AIO::fd#$_[0]";
892     local *$sym;
893 root 1.25
894 root 1.27 open *$sym, "+<&=$_[0]" # usually works under any unix
895     or open *$sym, "<&=$_[0]" # cygwin needs this
896     or open *$sym, ">&=$_[0]" # or this
897 root 1.2 or return undef;
898    
899 root 1.23 *$sym
900 root 1.2 }
901    
902 root 1.61 min_parallel 8;
903 root 1.1
904     END {
905     max_parallel 0;
906     }
907    
908     1;
909    
910 root 1.27 =head2 FORK BEHAVIOUR
911    
912 root 1.52 This module should do "the right thing" when the process using it forks:
913    
914 root 1.34 Before the fork, IO::AIO enters a quiescent state where no requests
915     can be added in other threads and no results will be processed. After
916     the fork the parent simply leaves the quiescent state and continues
917 root 1.72 request/result processing, while the child frees the request/result queue
918     (so that the requests started before the fork will only be handled in the
919     parent). Threads will be started on demand until the limit set in the
920 root 1.34 parent process has been reached again.
921 root 1.27
922 root 1.52 In short: the parent will, after a short pause, continue as if fork had
923     not been called, while the child will act as if IO::AIO has not been used
924     yet.
925    
926 root 1.60 =head2 MEMORY USAGE
927    
928 root 1.72 Per-request usage:
929    
930     Each aio request uses - depending on your architecture - around 100-200
931     bytes of memory. In addition, stat requests need a stat buffer (possibly
932     a few hundred bytes), readdir requires a result buffer and so on. Perl
933     scalars and other data passed into aio requests will also be locked and
934     will consume memory till the request has entered the done state.
935 root 1.60
936     This is now awfully much, so queuing lots of requests is not usually a
937     problem.
938    
939 root 1.72 Per-thread usage:
940    
941     In the execution phase, some aio requests require more memory for
942     temporary buffers, and each thread requires a stack and other data
943     structures (usually around 16k-128k, depending on the OS).
944    
945     =head1 KNOWN BUGS
946    
947 root 1.73 Known bugs will be fixed in the next release.
948 root 1.60
949 root 1.1 =head1 SEE ALSO
950    
951 root 1.68 L<Coro::AIO>.
952 root 1.1
953     =head1 AUTHOR
954    
955     Marc Lehmann <schmorp@schmorp.de>
956     http://home.schmorp.de/
957    
958     =cut
959