ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.55
Committed: Sun Oct 22 00:49:29 2006 UTC (17 years, 7 months ago) by root
Branch: MAIN
Changes since 1.54: +96 -15 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.52 use IO::AIO 2; # version has aio objects
21    
22     my $req = aio_unlink "/tmp/file", sub { };
23     $req->cancel; # cancel request if still in queue
24    
25 root 1.42 # AnyEvent
26     open my $fh, "<&=" . IO::AIO::poll_fileno or die "$!";
27     my $w = AnyEvent->io (fh => $fh, poll => 'r', cb => sub { IO::AIO::poll_cb });
28    
29 root 1.6 # Event
30     Event->io (fd => IO::AIO::poll_fileno,
31 root 1.7 poll => 'r',
32 root 1.6 cb => \&IO::AIO::poll_cb);
33    
34     # Glib/Gtk2
35     add_watch Glib::IO IO::AIO::poll_fileno,
36 root 1.22 in => sub { IO::AIO::poll_cb; 1 };
37 root 1.6
38     # Tk
39     Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
40     readable => \&IO::AIO::poll_cb);
41    
42 root 1.11 # Danga::Socket
43     Danga::Socket->AddOtherFds (IO::AIO::poll_fileno =>
44     \&IO::AIO::poll_cb);
45    
46    
47 root 1.1 =head1 DESCRIPTION
48    
49     This module implements asynchronous I/O using whatever means your
50 root 1.2 operating system supports.
51 root 1.1
52 root 1.2 Currently, a number of threads are started that execute your read/writes
53     and signal their completion. You don't need thread support in your libc or
54     perl, and the threads created by this module will not be visible to the
55     pthreads library. In the future, this module might make use of the native
56     aio functions available on many operating systems. However, they are often
57     not well-supported (Linux doesn't allow them on normal files currently,
58     for example), and they would only support aio_read and aio_write, so the
59     remaining functionality would have to be implemented using threads anyway.
60 root 1.1
61     Although the module will work with in the presence of other threads, it is
62 root 1.22 currently not reentrant, so use appropriate locking yourself, always call
63     C<poll_cb> from within the same thread, or never call C<poll_cb> (or other
64     C<aio_> functions) recursively.
65 root 1.1
66     =cut
67    
68     package IO::AIO;
69    
70 root 1.23 no warnings;
71 root 1.51 use strict 'vars';
72 root 1.23
73 root 1.1 use base 'Exporter';
74    
75     BEGIN {
76 root 1.55 our $VERSION = '2.0';
77 root 1.1
78 root 1.51 our @EXPORT = qw(aio_sendfile aio_read aio_write aio_open aio_close aio_stat
79     aio_lstat aio_unlink aio_rmdir aio_readdir aio_scandir aio_symlink
80 root 1.54 aio_fsync aio_fdatasync aio_readahead aio_rename aio_link aio_move
81     aio_group);
82 root 1.51 our @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel max_outstanding nreqs);
83 root 1.1
84 root 1.54 @IO::AIO::GRP::ISA = 'IO::AIO::REQ';
85    
86 root 1.1 require XSLoader;
87 root 1.51 XSLoader::load ("IO::AIO", $VERSION);
88 root 1.1 }
89    
90 root 1.5 =head1 FUNCTIONS
91 root 1.1
92 root 1.5 =head2 AIO FUNCTIONS
93 root 1.1
94 root 1.5 All the C<aio_*> calls are more or less thin wrappers around the syscall
95     with the same name (sans C<aio_>). The arguments are similar or identical,
96 root 1.14 and they all accept an additional (and optional) C<$callback> argument
97     which must be a code reference. This code reference will get called with
98     the syscall return code (e.g. most syscalls return C<-1> on error, unlike
99     perl, which usually delivers "false") as it's sole argument when the given
100     syscall has been executed asynchronously.
101 root 1.1
102 root 1.23 All functions expecting a filehandle keep a copy of the filehandle
103     internally until the request has finished.
104 root 1.1
105 root 1.55 All requests return objects of type L<IO::AIO::REQ> that allow further
106     manipulation of those requests while they are in-flight.
107 root 1.52
108 root 1.28 The pathnames you pass to these routines I<must> be absolute and
109     encoded in byte form. The reason for the former is that at the time the
110     request is being executed, the current working directory could have
111     changed. Alternatively, you can make sure that you never change the
112     current working directory.
113    
114     To encode pathnames to byte form, either make sure you either: a)
115     always pass in filenames you got from outside (command line, readdir
116     etc.), b) are ASCII or ISO 8859-1, c) use the Encode module and encode
117     your pathnames to the locale (or other) encoding in effect in the user
118     environment, d) use Glib::filename_from_unicode on unicode filenames or e)
119     use something else.
120 root 1.1
121 root 1.5 =over 4
122 root 1.1
123 root 1.40 =item aio_open $pathname, $flags, $mode, $callback->($fh)
124 root 1.1
125 root 1.2 Asynchronously open or create a file and call the callback with a newly
126     created filehandle for the file.
127 root 1.1
128     The pathname passed to C<aio_open> must be absolute. See API NOTES, above,
129     for an explanation.
130    
131 root 1.20 The C<$flags> argument is a bitmask. See the C<Fcntl> module for a
132     list. They are the same as used by C<sysopen>.
133    
134     Likewise, C<$mode> specifies the mode of the newly created file, if it
135     didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>,
136     except that it is mandatory (i.e. use C<0> if you don't create new files,
137     and C<0666> or C<0777> if you do).
138 root 1.1
139     Example:
140    
141     aio_open "/etc/passwd", O_RDONLY, 0, sub {
142 root 1.2 if ($_[0]) {
143     print "open successful, fh is $_[0]\n";
144 root 1.1 ...
145     } else {
146     die "open failed: $!\n";
147     }
148     };
149    
150 root 1.40 =item aio_close $fh, $callback->($status)
151 root 1.1
152 root 1.2 Asynchronously close a file and call the callback with the result
153     code. I<WARNING:> although accepted, you should not pass in a perl
154 root 1.20 filehandle here, as perl will likely close the file descriptor another
155     time when the filehandle is destroyed. Normally, you can safely call perls
156     C<close> or just let filehandles go out of scope.
157    
158     This is supposed to be a bug in the API, so that might change. It's
159     therefore best to avoid this function.
160 root 1.1
161 root 1.40 =item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
162 root 1.1
163 root 1.40 =item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
164 root 1.1
165     Reads or writes C<length> bytes from the specified C<fh> and C<offset>
166     into the scalar given by C<data> and offset C<dataoffset> and calls the
167     callback without the actual number of bytes read (or -1 on error, just
168     like the syscall).
169    
170 root 1.31 The C<$data> scalar I<MUST NOT> be modified in any way while the request
171     is outstanding. Modifying it can result in segfaults or WW3 (if the
172     necessary/optional hardware is installed).
173    
174 root 1.17 Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at
175 root 1.1 offset C<0> within the scalar:
176    
177     aio_read $fh, 7, 15, $buffer, 0, sub {
178 root 1.9 $_[0] > 0 or die "read error: $!";
179     print "read $_[0] bytes: <$buffer>\n";
180 root 1.1 };
181    
182 root 1.50 =item aio_move $srcpath, $dstpath, $callback->($status)
183    
184 root 1.52 Try to move the I<file> (directories not supported as either source or
185     destination) from C<$srcpath> to C<$dstpath> and call the callback with
186     the C<0> (error) or C<-1> ok.
187 root 1.50
188     This is a composite request that tries to rename(2) the file first. If
189     rename files with C<EXDEV>, it creates the destination file with mode 0200
190     and copies the contents of the source file into it using C<aio_sendfile>,
191     followed by restoring atime, mtime, access mode and uid/gid, in that
192     order, and unlinking the C<$srcpath>.
193    
194     If an error occurs, the partial destination file will be unlinked, if
195     possible, except when setting atime, mtime, access mode and uid/gid, where
196     errors are being ignored.
197    
198     =cut
199    
200     sub aio_move($$$) {
201     my ($src, $dst, $cb) = @_;
202    
203 root 1.55 my $grp = aio_group;
204    
205     add $grp aio_rename $src, $dst, sub {
206 root 1.51 if ($_[0] && $! == EXDEV) {
207 root 1.55 add $grp aio_open $src, O_RDONLY, 0, sub {
208 root 1.50 if (my $src_fh = $_[0]) {
209     my @stat = stat $src_fh;
210    
211 root 1.55 add $grp aio_open $dst, O_WRONLY, 0200, sub {
212 root 1.50 if (my $dst_fh = $_[0]) {
213 root 1.55 add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub {
214 root 1.50 close $src_fh;
215    
216     if ($_[0] == $stat[7]) {
217     utime $stat[8], $stat[9], $dst;
218     chmod $stat[2] & 07777, $dst_fh;
219     chown $stat[4], $stat[5], $dst_fh;
220     close $dst_fh;
221    
222 root 1.55 add $grp aio_unlink $src, sub {
223 root 1.50 $cb->($_[0]);
224     };
225     } else {
226     my $errno = $!;
227 root 1.55 add $grp aio_unlink $dst, sub {
228 root 1.50 $! = $errno;
229     $cb->(-1);
230     };
231     }
232     };
233     } else {
234     $cb->(-1);
235     }
236     },
237    
238     } else {
239     $cb->(-1);
240     }
241     };
242     } else {
243     $cb->($_[0]);
244     }
245     };
246 root 1.55
247     $grp
248 root 1.50 }
249    
250 root 1.40 =item aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
251 root 1.35
252     Tries to copy C<$length> bytes from C<$in_fh> to C<$out_fh>. It starts
253     reading at byte offset C<$in_offset>, and starts writing at the current
254     file offset of C<$out_fh>. Because of that, it is not safe to issue more
255     than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each
256     other.
257    
258     This call tries to make use of a native C<sendfile> syscall to provide
259     zero-copy operation. For this to work, C<$out_fh> should refer to a
260     socket, and C<$in_fh> should refer to mmap'able file.
261    
262     If the native sendfile call fails or is not implemented, it will be
263 root 1.36 emulated, so you can call C<aio_sendfile> on any type of filehandle
264     regardless of the limitations of the operating system.
265 root 1.35
266     Please note, however, that C<aio_sendfile> can read more bytes from
267     C<$in_fh> than are written, and there is no way to find out how many
268 root 1.36 bytes have been read from C<aio_sendfile> alone, as C<aio_sendfile> only
269     provides the number of bytes written to C<$out_fh>. Only if the result
270     value equals C<$length> one can assume that C<$length> bytes have been
271     read.
272 root 1.35
273 root 1.40 =item aio_readahead $fh,$offset,$length, $callback->($retval)
274 root 1.1
275 root 1.20 C<aio_readahead> populates the page cache with data from a file so that
276 root 1.1 subsequent reads from that file will not block on disk I/O. The C<$offset>
277     argument specifies the starting point from which data is to be read and
278     C<$length> specifies the number of bytes to be read. I/O is performed in
279     whole pages, so that offset is effectively rounded down to a page boundary
280     and bytes are read up to the next page boundary greater than or equal to
281 root 1.20 (off-set+length). C<aio_readahead> does not read beyond the end of the
282 root 1.1 file. The current file offset of the file is left unchanged.
283    
284 root 1.26 If that syscall doesn't exist (likely if your OS isn't Linux) it will be
285     emulated by simply reading the data, which would have a similar effect.
286    
287 root 1.40 =item aio_stat $fh_or_path, $callback->($status)
288 root 1.1
289 root 1.40 =item aio_lstat $fh, $callback->($status)
290 root 1.1
291     Works like perl's C<stat> or C<lstat> in void context. The callback will
292     be called after the stat and the results will be available using C<stat _>
293     or C<-s _> etc...
294    
295     The pathname passed to C<aio_stat> must be absolute. See API NOTES, above,
296     for an explanation.
297    
298     Currently, the stats are always 64-bit-stats, i.e. instead of returning an
299     error when stat'ing a large file, the results will be silently truncated
300     unless perl itself is compiled with large file support.
301    
302     Example: Print the length of F</etc/passwd>:
303    
304     aio_stat "/etc/passwd", sub {
305     $_[0] and die "stat failed: $!";
306     print "size is ", -s _, "\n";
307     };
308    
309 root 1.40 =item aio_unlink $pathname, $callback->($status)
310 root 1.1
311     Asynchronously unlink (delete) a file and call the callback with the
312     result code.
313    
314 root 1.50 =item aio_link $srcpath, $dstpath, $callback->($status)
315    
316     Asynchronously create a new link to the existing object at C<$srcpath> at
317     the path C<$dstpath> and call the callback with the result code.
318    
319     =item aio_symlink $srcpath, $dstpath, $callback->($status)
320    
321     Asynchronously create a new symbolic link to the existing object at C<$srcpath> at
322     the path C<$dstpath> and call the callback with the result code.
323    
324     =item aio_rename $srcpath, $dstpath, $callback->($status)
325    
326     Asynchronously rename the object at C<$srcpath> to C<$dstpath>, just as
327     rename(2) and call the callback with the result code.
328    
329 root 1.40 =item aio_rmdir $pathname, $callback->($status)
330 root 1.27
331     Asynchronously rmdir (delete) a directory and call the callback with the
332     result code.
333    
334 root 1.46 =item aio_readdir $pathname, $callback->($entries)
335 root 1.37
336     Unlike the POSIX call of the same name, C<aio_readdir> reads an entire
337     directory (i.e. opendir + readdir + closedir). The entries will not be
338     sorted, and will B<NOT> include the C<.> and C<..> entries.
339    
340     The callback a single argument which is either C<undef> or an array-ref
341     with the filenames.
342    
343 root 1.40 =item aio_scandir $path, $maxreq, $callback->($dirs, $nondirs)
344    
345 root 1.52 Scans a directory (similar to C<aio_readdir>) but additionally tries to
346     separate the entries of directory C<$path> into two sets of names, ones
347     you can recurse into (directories or links to them), and ones you cannot
348     recurse into (everything else).
349    
350     C<aio_scandir> is a composite request that consists of many sub
351     requests. C<$maxreq> specifies the maximum number of outstanding aio
352     requests that this function generates. If it is C<< <= 0 >>, then a
353 root 1.40 suitable default will be chosen (currently 8).
354    
355     On error, the callback is called without arguments, otherwise it receives
356     two array-refs with path-relative entry names.
357    
358     Example:
359    
360     aio_scandir $dir, 0, sub {
361     my ($dirs, $nondirs) = @_;
362     print "real directories: @$dirs\n";
363     print "everything else: @$nondirs\n";
364     };
365    
366     Implementation notes.
367    
368     The C<aio_readdir> cannot be avoided, but C<stat()>'ing every entry can.
369    
370     After reading the directory, the modification time, size etc. of the
371 root 1.52 directory before and after the readdir is checked, and if they match (and
372     isn't the current time), the link count will be used to decide how many
373     entries are directories (if >= 2). Otherwise, no knowledge of the number
374     of subdirectories will be assumed.
375    
376     Then entries will be sorted into likely directories (everything without
377     a non-initial dot currently) and likely non-directories (everything
378     else). Then every entry plus an appended C</.> will be C<stat>'ed,
379     likely directories first. If that succeeds, it assumes that the entry
380     is a directory or a symlink to directory (which will be checked
381     seperately). This is often faster than stat'ing the entry itself because
382     filesystems might detect the type of the entry without reading the inode
383     data (e.g. ext2fs filetype feature).
384    
385     If the known number of directories (link count - 2) has been reached, the
386     rest of the entries is assumed to be non-directories.
387    
388     This only works with certainty on POSIX (= UNIX) filesystems, which
389     fortunately are the vast majority of filesystems around.
390    
391     It will also likely work on non-POSIX filesystems with reduced efficiency
392     as those tend to return 0 or 1 as link counts, which disables the
393     directory counting heuristic.
394 root 1.40
395     =cut
396    
397     sub aio_scandir($$$) {
398     my ($path, $maxreq, $cb) = @_;
399    
400 root 1.55 my $grp = aio_group;
401    
402 root 1.40 $maxreq = 8 if $maxreq <= 0;
403    
404     # stat once
405 root 1.55 add $grp aio_stat $path, sub {
406 root 1.47 return $cb->() if $_[0];
407 root 1.52 my $now = time;
408 root 1.40 my $hash1 = join ":", (stat _)[0,1,3,7,9];
409    
410     # read the directory entries
411 root 1.55 add $grp aio_readdir $path, sub {
412 root 1.40 my $entries = shift
413     or return $cb->();
414    
415     # stat the dir another time
416 root 1.55 add $grp aio_stat $path, sub {
417 root 1.40 my $hash2 = join ":", (stat _)[0,1,3,7,9];
418    
419     my $ndirs;
420    
421     # take the slow route if anything looks fishy
422 root 1.52 if ($hash1 ne $hash2 or (stat _)[9] == $now) {
423 root 1.40 $ndirs = -1;
424     } else {
425     # if nlink == 2, we are finished
426     # on non-posix-fs's, we rely on nlink < 2
427     $ndirs = (stat _)[3] - 2
428 root 1.43 or return $cb->([], $entries);
429 root 1.40 }
430    
431     # sort into likely dirs and likely nondirs
432     # dirs == files without ".", short entries first
433     $entries = [map $_->[0],
434     sort { $b->[1] cmp $a->[1] }
435     map [$_, sprintf "%s%04d", (/.\./ ? "1" : "0"), length],
436     @$entries];
437    
438     my (@dirs, @nondirs);
439    
440     my ($statcb, $schedcb);
441     my $nreq = 0;
442    
443     $schedcb = sub {
444     if (@$entries) {
445     if ($nreq < $maxreq) {
446     my $ent = pop @$entries;
447     $nreq++;
448 root 1.55 add $grp aio_stat "$path/$ent/.", sub { $statcb->($_[0], $ent) };
449 root 1.40 }
450     } elsif (!$nreq) {
451     # finished
452     undef $statcb;
453     undef $schedcb;
454 root 1.45 $cb->(\@dirs, \@nondirs) if $cb;
455 root 1.40 undef $cb;
456     }
457     };
458     $statcb = sub {
459     my ($status, $entry) = @_;
460    
461     if ($status < 0) {
462     $nreq--;
463     push @nondirs, $entry;
464     &$schedcb;
465     } else {
466     # need to check for real directory
467 root 1.55 add $grp aio_lstat "$path/$entry", sub {
468 root 1.40 $nreq--;
469    
470     if (-d _) {
471     push @dirs, $entry;
472    
473     if (!--$ndirs) {
474     push @nondirs, @$entries;
475     $entries = [];
476     }
477     } else {
478     push @nondirs, $entry;
479     }
480    
481     &$schedcb;
482     }
483     }
484     };
485    
486     &$schedcb while @$entries && $nreq < $maxreq;
487     };
488     };
489     };
490 root 1.55
491     $grp
492 root 1.40 }
493    
494     =item aio_fsync $fh, $callback->($status)
495 root 1.1
496     Asynchronously call fsync on the given filehandle and call the callback
497     with the fsync result code.
498    
499 root 1.40 =item aio_fdatasync $fh, $callback->($status)
500 root 1.1
501     Asynchronously call fdatasync on the given filehandle and call the
502 root 1.26 callback with the fdatasync result code.
503    
504     If this call isn't available because your OS lacks it or it couldn't be
505     detected, it will be emulated by calling C<fsync> instead.
506 root 1.1
507 root 1.54 =item aio_group $callback->()
508    
509 root 1.55 [EXPERIMENTAL]
510    
511     This is a very special aio request: Instead of doing something, it is a
512     container for other aio requests, which is useful if you want to bundle
513     many requests into a single, composite, request.
514    
515     Returns an object of class L<IO::AIO::GRP>. See its documentation below
516     for more info.
517    
518     Example:
519    
520     my $grp = aio_group sub {
521     print "all stats done\n";
522     };
523    
524     add $grp
525     (aio_stat ...),
526     (aio_stat ...),
527     ...;
528    
529 root 1.54 =item aio_sleep $fractional_seconds, $callback->() *NOT EXPORTED*
530    
531     Mainly used for debugging and benchmarking, this aio request puts one of
532     the request workers to sleep for the given time.
533    
534 root 1.5 =back
535    
536 root 1.53 =head2 IO::AIO::REQ CLASS
537 root 1.52
538     All non-aggregate C<aio_*> functions return an object of this class when
539     called in non-void context.
540    
541     A request always moves through the following five states in its lifetime,
542     in order: B<ready> (request has been created, but has not been executed
543     yet), B<execute> (request is currently being executed), B<pending>
544     (request has been executed but callback has not been called yet),
545     B<result> (results are being processed synchronously, includes calling the
546     callback) and B<done> (request has reached the end of its lifetime and
547     holds no resources anymore).
548    
549     =over 4
550    
551     =item $req->cancel
552    
553     Cancels the request, if possible. Has the effect of skipping execution
554     when entering the B<execute> state and skipping calling the callback when
555     entering the the B<result> state, but will leave the request otherwise
556     untouched. That means that requests that currently execute will not be
557     stopped and resources held by the request will not be freed prematurely.
558    
559     =back
560    
561 root 1.55 =head2 IO::AIO::GRP CLASS
562    
563     This class is a subclass of L<IO::AIO::REQ>, so all its methods apply to
564     objects of this class, too.
565    
566     A IO::AIO::GRP object is a special request that can contain multiple other
567     aio requests.
568    
569     You create one by calling the C<aio_group> constructing function with a
570     callback that will be called when all contained requests have entered the
571     C<done> state:
572    
573     my $grp = aio_group sub {
574     print "all requests are done\n";
575     };
576    
577     You add requests by calling the C<add> method with one or more
578     C<IO::AIO::REQ> objects:
579    
580     $grp->add (aio_unlink "...");
581    
582     add $grp aio_stat "...", sub { ... };
583    
584     This makes it very easy to create composite requests (see the source of
585     C<aio_move> for an application) that work and feel like simple requests.
586    
587     The IO::AIO::GRP objects will be cleaned up during calls to
588     C<IO::AIO::poll_cb>, just like any other request.
589    
590     They can be canceled like any other request. Canceling will cancel not
591     just the request itself, but also all requests it contains.
592    
593     They can also can also be added to other IO::AIO::GRP objects.
594    
595     Their lifetime, simplified, looks like this: when they are empty, they
596     will finish very quickly. If they contain only requests that are in the
597     C<done> state, they will also finish. Otherwise they will continue to
598     exist.
599    
600     =over 4
601    
602     =item $grp->add (...)
603    
604     =item add $grp ...
605    
606     Add one or more
607     Cancels the request, if possible. Has the effect of skipping execution
608     when entering the B<execute> state and skipping calling the callback when
609     entering the the B<result> state, but will leave the request otherwise
610     untouched. That means that requests that currently execute will not be
611     stopped and resources held by the request will not be freed prematurely.
612    
613     =back
614    
615 root 1.5 =head2 SUPPORT FUNCTIONS
616    
617     =over 4
618    
619     =item $fileno = IO::AIO::poll_fileno
620    
621 root 1.20 Return the I<request result pipe file descriptor>. This filehandle must be
622     polled for reading by some mechanism outside this module (e.g. Event or
623     select, see below or the SYNOPSIS). If the pipe becomes readable you have
624     to call C<poll_cb> to check the results.
625 root 1.5
626     See C<poll_cb> for an example.
627    
628     =item IO::AIO::poll_cb
629    
630     Process all outstanding events on the result pipe. You have to call this
631     regularly. Returns the number of events processed. Returns immediately
632     when no events are outstanding.
633    
634 root 1.20 Example: Install an Event watcher that automatically calls
635     IO::AIO::poll_cb with high priority:
636 root 1.5
637     Event->io (fd => IO::AIO::poll_fileno,
638     poll => 'r', async => 1,
639     cb => \&IO::AIO::poll_cb);
640    
641     =item IO::AIO::poll_wait
642    
643     Wait till the result filehandle becomes ready for reading (simply does a
644 root 1.20 C<select> on the filehandle. This is useful if you want to synchronously wait
645 root 1.5 for some requests to finish).
646    
647     See C<nreqs> for an example.
648    
649     =item IO::AIO::nreqs
650    
651 root 1.20 Returns the number of requests currently outstanding (i.e. for which their
652     callback has not been invoked yet).
653 root 1.5
654     Example: wait till there are no outstanding requests anymore:
655    
656     IO::AIO::poll_wait, IO::AIO::poll_cb
657     while IO::AIO::nreqs;
658    
659 root 1.12 =item IO::AIO::flush
660    
661     Wait till all outstanding AIO requests have been handled.
662    
663 root 1.13 Strictly equivalent to:
664    
665     IO::AIO::poll_wait, IO::AIO::poll_cb
666     while IO::AIO::nreqs;
667    
668     =item IO::AIO::poll
669    
670     Waits until some requests have been handled.
671    
672     Strictly equivalent to:
673    
674     IO::AIO::poll_wait, IO::AIO::poll_cb
675     if IO::AIO::nreqs;
676    
677 root 1.5 =item IO::AIO::min_parallel $nthreads
678    
679 root 1.34 Set the minimum number of AIO threads to C<$nthreads>. The current default
680     is C<4>, which means four asynchronous operations can be done at one time
681 root 1.5 (the number of outstanding operations, however, is unlimited).
682    
683 root 1.34 IO::AIO starts threads only on demand, when an AIO request is queued and
684     no free thread exists.
685    
686 root 1.5 It is recommended to keep the number of threads low, as some Linux
687     kernel versions will scale negatively with the number of threads (higher
688     parallelity => MUCH higher latency). With current Linux 2.6 versions, 4-32
689     threads should be fine.
690    
691 root 1.34 Under most circumstances you don't need to call this function, as the
692     module selects a default that is suitable for low to moderate load.
693 root 1.5
694     =item IO::AIO::max_parallel $nthreads
695    
696 root 1.34 Sets the maximum number of AIO threads to C<$nthreads>. If more than the
697     specified number of threads are currently running, this function kills
698     them. This function blocks until the limit is reached.
699    
700     While C<$nthreads> are zero, aio requests get queued but not executed
701     until the number of threads has been increased again.
702 root 1.5
703     This module automatically runs C<max_parallel 0> at program end, to ensure
704     that all threads are killed and that there are no outstanding requests.
705    
706     Under normal circumstances you don't need to call this function.
707    
708     =item $oldnreqs = IO::AIO::max_outstanding $nreqs
709    
710     Sets the maximum number of outstanding requests to C<$nreqs>. If you
711     try to queue up more than this number of requests, the caller will block until
712     some requests have been handled.
713    
714     The default is very large, so normally there is no practical limit. If you
715 root 1.34 queue up many requests in a loop it often improves speed if you set
716 root 1.5 this to a relatively low number, such as C<100>.
717    
718     Under normal circumstances you don't need to call this function.
719    
720     =back
721    
722 root 1.1 =cut
723    
724 root 1.2 # support function to convert a fd into a perl filehandle
725     sub _fd2fh {
726     return undef if $_[0] < 0;
727    
728 root 1.23 # try to generate nice filehandles
729     my $sym = "IO::AIO::fd#$_[0]";
730     local *$sym;
731 root 1.25
732 root 1.27 open *$sym, "+<&=$_[0]" # usually works under any unix
733     or open *$sym, "<&=$_[0]" # cygwin needs this
734     or open *$sym, ">&=$_[0]" # or this
735 root 1.2 or return undef;
736    
737 root 1.23 *$sym
738 root 1.2 }
739    
740 root 1.1 min_parallel 4;
741    
742     END {
743     max_parallel 0;
744     }
745    
746     1;
747    
748 root 1.27 =head2 FORK BEHAVIOUR
749    
750 root 1.52 This module should do "the right thing" when the process using it forks:
751    
752 root 1.34 Before the fork, IO::AIO enters a quiescent state where no requests
753     can be added in other threads and no results will be processed. After
754     the fork the parent simply leaves the quiescent state and continues
755     request/result processing, while the child clears the request/result
756     queue (so the requests started before the fork will only be handled in
757 root 1.52 the parent). Threads will be started on demand until the limit ste in the
758 root 1.34 parent process has been reached again.
759 root 1.27
760 root 1.52 In short: the parent will, after a short pause, continue as if fork had
761     not been called, while the child will act as if IO::AIO has not been used
762     yet.
763    
764 root 1.1 =head1 SEE ALSO
765    
766 root 1.52 L<Coro>, L<Linux::AIO> (obsolete).
767 root 1.1
768     =head1 AUTHOR
769    
770     Marc Lehmann <schmorp@schmorp.de>
771     http://home.schmorp.de/
772    
773     =cut
774