ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.184
Committed: Mon Nov 1 22:03:43 2010 UTC (13 years, 7 months ago) by root
Branch: MAIN
CVS Tags: rel-3_7
Changes since 1.183: +24 -2 lines
Log Message:
3.7

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.181 aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub {
10 root 1.94 my $fh = shift
11     or die "/etc/passwd: $!";
12 root 1.6 ...
13     };
14    
15     aio_unlink "/tmp/file", sub { };
16    
17     aio_read $fh, 30000, 1024, $buffer, 0, sub {
18 root 1.8 $_[0] > 0 or die "read error: $!";
19 root 1.6 };
20    
21 root 1.56 # version 2+ has request and group objects
22     use IO::AIO 2;
23 root 1.52
24 root 1.68 aioreq_pri 4; # give next request a very high priority
25 root 1.52 my $req = aio_unlink "/tmp/file", sub { };
26     $req->cancel; # cancel request if still in queue
27    
28 root 1.56 my $grp = aio_group sub { print "all stats done\n" };
29     add $grp aio_stat "..." for ...;
30    
31 root 1.1 =head1 DESCRIPTION
32    
33     This module implements asynchronous I/O using whatever means your
34 root 1.156 operating system supports. It is implemented as an interface to C<libeio>
35     (L<http://software.schmorp.de/pkg/libeio.html>).
36 root 1.1
37 root 1.85 Asynchronous means that operations that can normally block your program
38     (e.g. reading from disk) will be done asynchronously: the operation
39     will still block, but you can do something else in the meantime. This
40     is extremely useful for programs that need to stay interactive even
41     when doing heavy I/O (GUI programs, high performance network servers
42     etc.), but can also be used to easily do operations in parallel that are
43     normally done sequentially, e.g. stat'ing many files, which is much faster
44     on a RAID volume or over NFS when you do a number of stat operations
45     concurrently.
46    
47 root 1.108 While most of this works on all types of file descriptors (for
48     example sockets), using these functions on file descriptors that
49 root 1.156 support nonblocking operation (again, sockets, pipes etc.) is
50     very inefficient. Use an event loop for that (such as the L<EV>
51 root 1.108 module): IO::AIO will naturally fit into such an event loop itself.
52 root 1.85
53 root 1.72 In this version, a number of threads are started that execute your
54     requests and signal their completion. You don't need thread support
55     in perl, and the threads created by this module will not be visible
56     to perl. In the future, this module might make use of the native aio
57     functions available on many operating systems. However, they are often
58 root 1.85 not well-supported or restricted (GNU/Linux doesn't allow them on normal
59 root 1.72 files currently, for example), and they would only support aio_read and
60     aio_write, so the remaining functionality would have to be implemented
61     using threads anyway.
62    
63 root 1.108 Although the module will work in the presence of other (Perl-) threads,
64     it is currently not reentrant in any way, so use appropriate locking
65     yourself, always call C<poll_cb> from within the same thread, or never
66     call C<poll_cb> (or other C<aio_> functions) recursively.
67 root 1.72
68 root 1.86 =head2 EXAMPLE
69    
70 root 1.156 This is a simple example that uses the EV module and loads
71 root 1.86 F</etc/passwd> asynchronously:
72    
73     use Fcntl;
74 root 1.156 use EV;
75 root 1.86 use IO::AIO;
76    
77 root 1.156 # register the IO::AIO callback with EV
78     my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb;
79 root 1.86
80     # queue the request to open /etc/passwd
81 root 1.181 aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub {
82 root 1.94 my $fh = shift
83 root 1.86 or die "error while opening: $!";
84    
85     # stat'ing filehandles is generally non-blocking
86     my $size = -s $fh;
87    
88     # queue a request to read the file
89     my $contents;
90     aio_read $fh, 0, $size, $contents, 0, sub {
91     $_[0] == $size
92     or die "short read: $!";
93    
94     close $fh;
95    
96     # file contents now in $contents
97     print $contents;
98    
99     # exit event loop and program
100 root 1.156 EV::unloop;
101 root 1.86 };
102     };
103    
104     # possibly queue up other requests, or open GUI windows,
105     # check for sockets etc. etc.
106    
107     # process events as long as there are some:
108 root 1.156 EV::loop;
109 root 1.86
110 root 1.72 =head1 REQUEST ANATOMY AND LIFETIME
111    
112     Every C<aio_*> function creates a request. which is a C data structure not
113     directly visible to Perl.
114    
115     If called in non-void context, every request function returns a Perl
116     object representing the request. In void context, nothing is returned,
117     which saves a bit of memory.
118    
119     The perl object is a fairly standard ref-to-hash object. The hash contents
120     are not used by IO::AIO so you are free to store anything you like in it.
121    
122     During their existance, aio requests travel through the following states,
123     in order:
124    
125     =over 4
126    
127     =item ready
128    
129     Immediately after a request is created it is put into the ready state,
130     waiting for a thread to execute it.
131    
132     =item execute
133    
134     A thread has accepted the request for processing and is currently
135     executing it (e.g. blocking in read).
136    
137     =item pending
138    
139     The request has been executed and is waiting for result processing.
140    
141     While request submission and execution is fully asynchronous, result
142     processing is not and relies on the perl interpreter calling C<poll_cb>
143     (or another function with the same effect).
144    
145     =item result
146    
147     The request results are processed synchronously by C<poll_cb>.
148    
149     The C<poll_cb> function will process all outstanding aio requests by
150     calling their callbacks, freeing memory associated with them and managing
151     any groups they are contained in.
152    
153     =item done
154    
155     Request has reached the end of its lifetime and holds no resources anymore
156     (except possibly for the Perl object, but its connection to the actual
157     aio request is severed and calling its methods will either do nothing or
158     result in a runtime error).
159 root 1.1
160 root 1.88 =back
161    
162 root 1.1 =cut
163    
164     package IO::AIO;
165    
166 root 1.117 use Carp ();
167    
168 root 1.161 use common::sense;
169 root 1.23
170 root 1.1 use base 'Exporter';
171    
172     BEGIN {
173 root 1.184 our $VERSION = '3.7';
174 root 1.1
175 root 1.120 our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close
176 root 1.148 aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx
177 root 1.120 aio_scandir aio_symlink aio_readlink aio_sync aio_fsync
178 root 1.142 aio_fdatasync aio_sync_file_range aio_pathsync aio_readahead
179 root 1.120 aio_rename aio_link aio_move aio_copy aio_group
180     aio_nop aio_mknod aio_load aio_rmtree aio_mkdir aio_chown
181 root 1.170 aio_chmod aio_utime aio_truncate
182 root 1.182 aio_msync aio_mtouch aio_mlock aio_mlockall
183     aio_statvfs);
184 root 1.120
185 root 1.123 our @EXPORT = (@AIO_REQ, qw(aioreq_pri aioreq_nice));
186 root 1.67 our @EXPORT_OK = qw(poll_fileno poll_cb poll_wait flush
187 root 1.86 min_parallel max_parallel max_idle
188     nreqs nready npending nthreads
189 root 1.157 max_poll_time max_poll_reqs
190 root 1.182 sendfile fadvise madvise
191     mmap munmap munlock munlockall);
192 root 1.1
193 root 1.143 push @AIO_REQ, qw(aio_busy); # not exported
194    
195 root 1.54 @IO::AIO::GRP::ISA = 'IO::AIO::REQ';
196    
197 root 1.1 require XSLoader;
198 root 1.51 XSLoader::load ("IO::AIO", $VERSION);
199 root 1.1 }
200    
201 root 1.5 =head1 FUNCTIONS
202 root 1.1
203 root 1.175 =head2 QUICK OVERVIEW
204    
205     This section simply lists the prototypes of the most important functions
206     for quick reference. See the following sections for function-by-function
207     documentation.
208    
209     aio_open $pathname, $flags, $mode, $callback->($fh)
210     aio_close $fh, $callback->($status)
211     aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
212     aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
213     aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
214     aio_readahead $fh,$offset,$length, $callback->($retval)
215     aio_stat $fh_or_path, $callback->($status)
216     aio_lstat $fh, $callback->($status)
217     aio_statvfs $fh_or_path, $callback->($statvfs)
218     aio_utime $fh_or_path, $atime, $mtime, $callback->($status)
219     aio_chown $fh_or_path, $uid, $gid, $callback->($status)
220     aio_truncate $fh_or_path, $offset, $callback->($status)
221     aio_chmod $fh_or_path, $mode, $callback->($status)
222     aio_unlink $pathname, $callback->($status)
223     aio_mknod $path, $mode, $dev, $callback->($status)
224     aio_link $srcpath, $dstpath, $callback->($status)
225     aio_symlink $srcpath, $dstpath, $callback->($status)
226     aio_readlink $path, $callback->($link)
227     aio_rename $srcpath, $dstpath, $callback->($status)
228     aio_mkdir $pathname, $mode, $callback->($status)
229     aio_rmdir $pathname, $callback->($status)
230     aio_readdir $pathname, $callback->($entries)
231     aio_readdirx $pathname, $flags, $callback->($entries, $flags)
232     IO::AIO::READDIR_DENTS IO::AIO::READDIR_DIRS_FIRST
233     IO::AIO::READDIR_STAT_ORDER IO::AIO::READDIR_FOUND_UNKNOWN
234     aio_load $path, $data, $callback->($status)
235     aio_copy $srcpath, $dstpath, $callback->($status)
236     aio_move $srcpath, $dstpath, $callback->($status)
237     aio_scandir $path, $maxreq, $callback->($dirs, $nondirs)
238     aio_rmtree $path, $callback->($status)
239     aio_sync $callback->($status)
240     aio_fsync $fh, $callback->($status)
241     aio_fdatasync $fh, $callback->($status)
242     aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status)
243     aio_pathsync $path, $callback->($status)
244     aio_msync $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status)
245     aio_mtouch $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status)
246 root 1.182 aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status)
247     aio_mlockall $flags, $callback->($status)
248 root 1.175 aio_group $callback->(...)
249     aio_nop $callback->()
250    
251     $prev_pri = aioreq_pri [$pri]
252     aioreq_nice $pri_adjust
253    
254     IO::AIO::poll_wait
255     IO::AIO::poll_cb
256     IO::AIO::poll
257     IO::AIO::flush
258     IO::AIO::max_poll_reqs $nreqs
259     IO::AIO::max_poll_time $seconds
260     IO::AIO::min_parallel $nthreads
261     IO::AIO::max_parallel $nthreads
262     IO::AIO::max_idle $nthreads
263     IO::AIO::max_outstanding $maxreqs
264     IO::AIO::nreqs
265     IO::AIO::nready
266     IO::AIO::npending
267    
268     IO::AIO::sendfile $ofh, $ifh, $offset, $count
269     IO::AIO::fadvise $fh, $offset, $len, $advice
270 root 1.184 IO::AIO::madvise $scalar, $offset, $length, $advice
271     IO::AIO::mprotect $scalar, $offset, $length, $protect
272 root 1.182 IO::AIO::munlock $scalar, $offset = 0, $length = undef
273 root 1.175 IO::AIO::munlockall
274    
275 root 1.87 =head2 AIO REQUEST FUNCTIONS
276 root 1.1
277 root 1.5 All the C<aio_*> calls are more or less thin wrappers around the syscall
278     with the same name (sans C<aio_>). The arguments are similar or identical,
279 root 1.14 and they all accept an additional (and optional) C<$callback> argument
280     which must be a code reference. This code reference will get called with
281     the syscall return code (e.g. most syscalls return C<-1> on error, unlike
282 root 1.136 perl, which usually delivers "false") as its sole argument after the given
283 root 1.14 syscall has been executed asynchronously.
284 root 1.1
285 root 1.23 All functions expecting a filehandle keep a copy of the filehandle
286     internally until the request has finished.
287 root 1.1
288 root 1.87 All functions return request objects of type L<IO::AIO::REQ> that allow
289     further manipulation of those requests while they are in-flight.
290 root 1.52
291 root 1.28 The pathnames you pass to these routines I<must> be absolute and
292 root 1.87 encoded as octets. The reason for the former is that at the time the
293 root 1.28 request is being executed, the current working directory could have
294     changed. Alternatively, you can make sure that you never change the
295 root 1.87 current working directory anywhere in the program and then use relative
296     paths.
297 root 1.28
298 root 1.87 To encode pathnames as octets, either make sure you either: a) always pass
299     in filenames you got from outside (command line, readdir etc.) without
300     tinkering, b) are ASCII or ISO 8859-1, c) use the Encode module and encode
301 root 1.28 your pathnames to the locale (or other) encoding in effect in the user
302     environment, d) use Glib::filename_from_unicode on unicode filenames or e)
303 root 1.87 use something else to ensure your scalar has the correct contents.
304    
305     This works, btw. independent of the internal UTF-8 bit, which IO::AIO
306 root 1.136 handles correctly whether it is set or not.
307 root 1.1
308 root 1.5 =over 4
309 root 1.1
310 root 1.80 =item $prev_pri = aioreq_pri [$pri]
311 root 1.68
312 root 1.80 Returns the priority value that would be used for the next request and, if
313     C<$pri> is given, sets the priority for the next aio request.
314 root 1.68
315 root 1.80 The default priority is C<0>, the minimum and maximum priorities are C<-4>
316     and C<4>, respectively. Requests with higher priority will be serviced
317     first.
318    
319     The priority will be reset to C<0> after each call to one of the C<aio_*>
320 root 1.68 functions.
321    
322 root 1.69 Example: open a file with low priority, then read something from it with
323     higher priority so the read request is serviced before other low priority
324     open requests (potentially spamming the cache):
325    
326     aioreq_pri -3;
327     aio_open ..., sub {
328     return unless $_[0];
329    
330     aioreq_pri -2;
331     aio_read $_[0], ..., sub {
332     ...
333     };
334     };
335    
336 root 1.106
337 root 1.69 =item aioreq_nice $pri_adjust
338    
339     Similar to C<aioreq_pri>, but subtracts the given value from the current
340 root 1.87 priority, so the effect is cumulative.
341 root 1.69
342 root 1.106
343 root 1.40 =item aio_open $pathname, $flags, $mode, $callback->($fh)
344 root 1.1
345 root 1.2 Asynchronously open or create a file and call the callback with a newly
346     created filehandle for the file.
347 root 1.1
348     The pathname passed to C<aio_open> must be absolute. See API NOTES, above,
349     for an explanation.
350    
351 root 1.20 The C<$flags> argument is a bitmask. See the C<Fcntl> module for a
352     list. They are the same as used by C<sysopen>.
353    
354     Likewise, C<$mode> specifies the mode of the newly created file, if it
355     didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>,
356     except that it is mandatory (i.e. use C<0> if you don't create new files,
357 root 1.101 and C<0666> or C<0777> if you do). Note that the C<$mode> will be modified
358     by the umask in effect then the request is being executed, so better never
359     change the umask.
360 root 1.1
361     Example:
362    
363 root 1.181 aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub {
364 root 1.2 if ($_[0]) {
365     print "open successful, fh is $_[0]\n";
366 root 1.1 ...
367     } else {
368     die "open failed: $!\n";
369     }
370     };
371    
372 root 1.106
373 root 1.40 =item aio_close $fh, $callback->($status)
374 root 1.1
375 root 1.2 Asynchronously close a file and call the callback with the result
376 root 1.116 code.
377    
378 root 1.117 Unfortunately, you can't do this to perl. Perl I<insists> very strongly on
379 root 1.121 closing the file descriptor associated with the filehandle itself.
380 root 1.117
381 root 1.121 Therefore, C<aio_close> will not close the filehandle - instead it will
382     use dup2 to overwrite the file descriptor with the write-end of a pipe
383     (the pipe fd will be created on demand and will be cached).
384 root 1.117
385 root 1.121 Or in other words: the file descriptor will be closed, but it will not be
386     free for reuse until the perl filehandle is closed.
387 root 1.117
388     =cut
389    
390 root 1.40 =item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
391 root 1.1
392 root 1.40 =item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
393 root 1.1
394 root 1.145 Reads or writes C<$length> bytes from or to the specified C<$fh> and
395     C<$offset> into the scalar given by C<$data> and offset C<$dataoffset>
396     and calls the callback without the actual number of bytes read (or -1 on
397     error, just like the syscall).
398 root 1.109
399 root 1.146 C<aio_read> will, like C<sysread>, shrink or grow the C<$data> scalar to
400     offset plus the actual number of bytes read.
401    
402 root 1.112 If C<$offset> is undefined, then the current file descriptor offset will
403     be used (and updated), otherwise the file descriptor offset will not be
404     changed by these calls.
405 root 1.109
406 root 1.145 If C<$length> is undefined in C<aio_write>, use the remaining length of
407     C<$data>.
408 root 1.109
409     If C<$dataoffset> is less than zero, it will be counted from the end of
410     C<$data>.
411 root 1.1
412 root 1.31 The C<$data> scalar I<MUST NOT> be modified in any way while the request
413 root 1.108 is outstanding. Modifying it can result in segfaults or World War III (if
414     the necessary/optional hardware is installed).
415 root 1.31
416 root 1.17 Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at
417 root 1.1 offset C<0> within the scalar:
418    
419     aio_read $fh, 7, 15, $buffer, 0, sub {
420 root 1.9 $_[0] > 0 or die "read error: $!";
421     print "read $_[0] bytes: <$buffer>\n";
422 root 1.1 };
423    
424 root 1.106
425 root 1.40 =item aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
426 root 1.35
427     Tries to copy C<$length> bytes from C<$in_fh> to C<$out_fh>. It starts
428     reading at byte offset C<$in_offset>, and starts writing at the current
429     file offset of C<$out_fh>. Because of that, it is not safe to issue more
430     than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each
431     other.
432    
433     This call tries to make use of a native C<sendfile> syscall to provide
434     zero-copy operation. For this to work, C<$out_fh> should refer to a
435 root 1.176 socket, and C<$in_fh> should refer to an mmap'able file.
436 root 1.35
437 root 1.170 If a native sendfile cannot be found or it fails with C<ENOSYS>,
438     C<ENOTSUP>, C<EOPNOTSUPP>, C<EAFNOSUPPORT>, C<EPROTOTYPE> or C<ENOTSOCK>,
439     it will be emulated, so you can call C<aio_sendfile> on any type of
440     filehandle regardless of the limitations of the operating system.
441 root 1.35
442     Please note, however, that C<aio_sendfile> can read more bytes from
443     C<$in_fh> than are written, and there is no way to find out how many
444 root 1.36 bytes have been read from C<aio_sendfile> alone, as C<aio_sendfile> only
445     provides the number of bytes written to C<$out_fh>. Only if the result
446     value equals C<$length> one can assume that C<$length> bytes have been
447     read.
448 root 1.35
449 root 1.106
450 root 1.40 =item aio_readahead $fh,$offset,$length, $callback->($retval)
451 root 1.1
452 root 1.20 C<aio_readahead> populates the page cache with data from a file so that
453 root 1.1 subsequent reads from that file will not block on disk I/O. The C<$offset>
454     argument specifies the starting point from which data is to be read and
455     C<$length> specifies the number of bytes to be read. I/O is performed in
456     whole pages, so that offset is effectively rounded down to a page boundary
457     and bytes are read up to the next page boundary greater than or equal to
458 root 1.20 (off-set+length). C<aio_readahead> does not read beyond the end of the
459 root 1.1 file. The current file offset of the file is left unchanged.
460    
461 root 1.26 If that syscall doesn't exist (likely if your OS isn't Linux) it will be
462     emulated by simply reading the data, which would have a similar effect.
463    
464 root 1.106
465 root 1.40 =item aio_stat $fh_or_path, $callback->($status)
466 root 1.1
467 root 1.40 =item aio_lstat $fh, $callback->($status)
468 root 1.1
469     Works like perl's C<stat> or C<lstat> in void context. The callback will
470     be called after the stat and the results will be available using C<stat _>
471     or C<-s _> etc...
472    
473     The pathname passed to C<aio_stat> must be absolute. See API NOTES, above,
474     for an explanation.
475    
476     Currently, the stats are always 64-bit-stats, i.e. instead of returning an
477     error when stat'ing a large file, the results will be silently truncated
478     unless perl itself is compiled with large file support.
479    
480     Example: Print the length of F</etc/passwd>:
481    
482     aio_stat "/etc/passwd", sub {
483     $_[0] and die "stat failed: $!";
484     print "size is ", -s _, "\n";
485     };
486    
487 root 1.106
488 root 1.175 =item aio_statvfs $fh_or_path, $callback->($statvfs)
489 root 1.172
490     Works like the POSIX C<statvfs> or C<fstatvfs> syscalls, depending on
491     whether a file handle or path was passed.
492    
493     On success, the callback is passed a hash reference with the following
494     members: C<bsize>, C<frsize>, C<blocks>, C<bfree>, C<bavail>, C<files>,
495     C<ffree>, C<favail>, C<fsid>, C<flag> and C<namemax>. On failure, C<undef>
496     is passed.
497    
498     The following POSIX IO::AIO::ST_* constants are defined: C<ST_RDONLY> and
499     C<ST_NOSUID>.
500    
501     The following non-POSIX IO::AIO::ST_* flag masks are defined to
502     their correct value when available, or to C<0> on systems that do
503     not support them: C<ST_NODEV>, C<ST_NOEXEC>, C<ST_SYNCHRONOUS>,
504     C<ST_MANDLOCK>, C<ST_WRITE>, C<ST_APPEND>, C<ST_IMMUTABLE>, C<ST_NOATIME>,
505     C<ST_NODIRATIME> and C<ST_RELATIME>.
506    
507     Example: stat C</wd> and dump out the data if successful.
508    
509     aio_statvfs "/wd", sub {
510     my $f = $_[0]
511     or die "statvfs: $!";
512    
513     use Data::Dumper;
514     say Dumper $f;
515     };
516    
517     # result:
518     {
519     bsize => 1024,
520     bfree => 4333064312,
521     blocks => 10253828096,
522     files => 2050765568,
523     flag => 4096,
524     favail => 2042092649,
525     bavail => 4333064312,
526     ffree => 2042092649,
527     namemax => 255,
528     frsize => 1024,
529     fsid => 1810
530     }
531    
532    
533 root 1.106 =item aio_utime $fh_or_path, $atime, $mtime, $callback->($status)
534    
535     Works like perl's C<utime> function (including the special case of $atime
536     and $mtime being undef). Fractional times are supported if the underlying
537     syscalls support them.
538    
539     When called with a pathname, uses utimes(2) if available, otherwise
540     utime(2). If called on a file descriptor, uses futimes(2) if available,
541     otherwise returns ENOSYS, so this is not portable.
542    
543     Examples:
544    
545 root 1.107 # set atime and mtime to current time (basically touch(1)):
546 root 1.106 aio_utime "path", undef, undef;
547     # set atime to current time and mtime to beginning of the epoch:
548     aio_utime "path", time, undef; # undef==0
549    
550    
551     =item aio_chown $fh_or_path, $uid, $gid, $callback->($status)
552    
553     Works like perl's C<chown> function, except that C<undef> for either $uid
554     or $gid is being interpreted as "do not change" (but -1 can also be used).
555    
556     Examples:
557    
558     # same as "chown root path" in the shell:
559     aio_chown "path", 0, -1;
560     # same as above:
561     aio_chown "path", 0, undef;
562    
563    
564 root 1.110 =item aio_truncate $fh_or_path, $offset, $callback->($status)
565    
566     Works like truncate(2) or ftruncate(2).
567    
568    
569 root 1.106 =item aio_chmod $fh_or_path, $mode, $callback->($status)
570    
571     Works like perl's C<chmod> function.
572    
573    
574 root 1.40 =item aio_unlink $pathname, $callback->($status)
575 root 1.1
576     Asynchronously unlink (delete) a file and call the callback with the
577     result code.
578    
579 root 1.106
580 root 1.82 =item aio_mknod $path, $mode, $dev, $callback->($status)
581    
582 root 1.86 [EXPERIMENTAL]
583    
584 root 1.83 Asynchronously create a device node (or fifo). See mknod(2).
585    
586 root 1.86 The only (POSIX-) portable way of calling this function is:
587 root 1.83
588     aio_mknod $path, IO::AIO::S_IFIFO | $mode, 0, sub { ...
589 root 1.82
590 root 1.106
591 root 1.50 =item aio_link $srcpath, $dstpath, $callback->($status)
592    
593     Asynchronously create a new link to the existing object at C<$srcpath> at
594     the path C<$dstpath> and call the callback with the result code.
595    
596 root 1.106
597 root 1.50 =item aio_symlink $srcpath, $dstpath, $callback->($status)
598    
599     Asynchronously create a new symbolic link to the existing object at C<$srcpath> at
600     the path C<$dstpath> and call the callback with the result code.
601    
602 root 1.106
603 root 1.90 =item aio_readlink $path, $callback->($link)
604    
605     Asynchronously read the symlink specified by C<$path> and pass it to
606     the callback. If an error occurs, nothing or undef gets passed to the
607     callback.
608    
609 root 1.106
610 root 1.50 =item aio_rename $srcpath, $dstpath, $callback->($status)
611    
612     Asynchronously rename the object at C<$srcpath> to C<$dstpath>, just as
613     rename(2) and call the callback with the result code.
614    
615 root 1.106
616 root 1.101 =item aio_mkdir $pathname, $mode, $callback->($status)
617    
618     Asynchronously mkdir (create) a directory and call the callback with
619     the result code. C<$mode> will be modified by the umask at the time the
620     request is executed, so do not change your umask.
621    
622 root 1.106
623 root 1.40 =item aio_rmdir $pathname, $callback->($status)
624 root 1.27
625     Asynchronously rmdir (delete) a directory and call the callback with the
626     result code.
627    
628 root 1.106
629 root 1.46 =item aio_readdir $pathname, $callback->($entries)
630 root 1.37
631     Unlike the POSIX call of the same name, C<aio_readdir> reads an entire
632     directory (i.e. opendir + readdir + closedir). The entries will not be
633     sorted, and will B<NOT> include the C<.> and C<..> entries.
634    
635 root 1.148 The callback is passed a single argument which is either C<undef> or an
636     array-ref with the filenames.
637    
638    
639     =item aio_readdirx $pathname, $flags, $callback->($entries, $flags)
640    
641     Quite similar to C<aio_readdir>, but the C<$flags> argument allows to tune
642     behaviour and output format. In case of an error, C<$entries> will be
643     C<undef>.
644    
645     The flags are a combination of the following constants, ORed together (the
646     flags will also be passed to the callback, possibly modified):
647    
648     =over 4
649    
650 root 1.150 =item IO::AIO::READDIR_DENTS
651 root 1.148
652     When this flag is off, then the callback gets an arrayref with of names
653     only (as with C<aio_readdir>), otherwise it gets an arrayref with
654 root 1.150 C<[$name, $type, $inode]> arrayrefs, each describing a single directory
655 root 1.148 entry in more detail.
656    
657     C<$name> is the name of the entry.
658    
659 root 1.150 C<$type> is one of the C<IO::AIO::DT_xxx> constants:
660 root 1.148
661 root 1.150 C<IO::AIO::DT_UNKNOWN>, C<IO::AIO::DT_FIFO>, C<IO::AIO::DT_CHR>, C<IO::AIO::DT_DIR>,
662     C<IO::AIO::DT_BLK>, C<IO::AIO::DT_REG>, C<IO::AIO::DT_LNK>, C<IO::AIO::DT_SOCK>,
663     C<IO::AIO::DT_WHT>.
664 root 1.148
665 root 1.150 C<IO::AIO::DT_UNKNOWN> means just that: readdir does not know. If you need to
666 root 1.148 know, you have to run stat yourself. Also, for speed reasons, the C<$type>
667     scalars are read-only: you can not modify them.
668    
669 root 1.150 C<$inode> is the inode number (which might not be exact on systems with 64
670 root 1.155 bit inode numbers and 32 bit perls). This field has unspecified content on
671     systems that do not deliver the inode information.
672 root 1.150
673     =item IO::AIO::READDIR_DIRS_FIRST
674 root 1.148
675     When this flag is set, then the names will be returned in an order where
676     likely directories come first. This is useful when you need to quickly
677     find directories, or you want to find all directories while avoiding to
678     stat() each entry.
679    
680 root 1.149 If the system returns type information in readdir, then this is used
681     to find directories directly. Otherwise, likely directories are files
682     beginning with ".", or otherwise files with no dots, of which files with
683     short names are tried first.
684    
685 root 1.150 =item IO::AIO::READDIR_STAT_ORDER
686 root 1.148
687     When this flag is set, then the names will be returned in an order
688     suitable for stat()'ing each one. That is, when you plan to stat()
689     all files in the given directory, then the returned order will likely
690     be fastest.
691    
692 root 1.150 If both this flag and C<IO::AIO::READDIR_DIRS_FIRST> are specified, then
693     the likely dirs come first, resulting in a less optimal stat order.
694 root 1.148
695 root 1.150 =item IO::AIO::READDIR_FOUND_UNKNOWN
696 root 1.148
697     This flag should not be set when calling C<aio_readdirx>. Instead, it
698     is being set by C<aio_readdirx>, when any of the C<$type>'s found were
699 root 1.150 C<IO::AIO::DT_UNKNOWN>. The absense of this flag therefore indicates that all
700 root 1.148 C<$type>'s are known, which can be used to speed up some algorithms.
701    
702     =back
703 root 1.37
704 root 1.106
705 root 1.98 =item aio_load $path, $data, $callback->($status)
706    
707     This is a composite request that tries to fully load the given file into
708     memory. Status is the same as with aio_read.
709    
710     =cut
711    
712     sub aio_load($$;$) {
713 root 1.123 my ($path, undef, $cb) = @_;
714     my $data = \$_[1];
715 root 1.98
716 root 1.123 my $pri = aioreq_pri;
717     my $grp = aio_group $cb;
718    
719     aioreq_pri $pri;
720     add $grp aio_open $path, O_RDONLY, 0, sub {
721     my $fh = shift
722     or return $grp->result (-1);
723 root 1.98
724     aioreq_pri $pri;
725 root 1.123 add $grp aio_read $fh, 0, (-s $fh), $$data, 0, sub {
726     $grp->result ($_[0]);
727 root 1.98 };
728 root 1.123 };
729 root 1.98
730 root 1.123 $grp
731 root 1.98 }
732    
733 root 1.82 =item aio_copy $srcpath, $dstpath, $callback->($status)
734    
735     Try to copy the I<file> (directories not supported as either source or
736     destination) from C<$srcpath> to C<$dstpath> and call the callback with
737 root 1.165 a status of C<0> (ok) or C<-1> (error, see C<$!>).
738 root 1.82
739 root 1.134 This is a composite request that creates the destination file with
740 root 1.82 mode 0200 and copies the contents of the source file into it using
741     C<aio_sendfile>, followed by restoring atime, mtime, access mode and
742     uid/gid, in that order.
743    
744     If an error occurs, the partial destination file will be unlinked, if
745     possible, except when setting atime, mtime, access mode and uid/gid, where
746     errors are being ignored.
747    
748     =cut
749    
750     sub aio_copy($$;$) {
751 root 1.123 my ($src, $dst, $cb) = @_;
752 root 1.82
753 root 1.123 my $pri = aioreq_pri;
754     my $grp = aio_group $cb;
755 root 1.82
756 root 1.123 aioreq_pri $pri;
757     add $grp aio_open $src, O_RDONLY, 0, sub {
758     if (my $src_fh = $_[0]) {
759 root 1.166 my @stat = stat $src_fh; # hmm, might block over nfs?
760 root 1.95
761 root 1.123 aioreq_pri $pri;
762     add $grp aio_open $dst, O_CREAT | O_WRONLY | O_TRUNC, 0200, sub {
763     if (my $dst_fh = $_[0]) {
764     aioreq_pri $pri;
765     add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub {
766     if ($_[0] == $stat[7]) {
767     $grp->result (0);
768     close $src_fh;
769    
770 root 1.147 my $ch = sub {
771     aioreq_pri $pri;
772     add $grp aio_chmod $dst_fh, $stat[2] & 07777, sub {
773     aioreq_pri $pri;
774     add $grp aio_chown $dst_fh, $stat[4], $stat[5], sub {
775     aioreq_pri $pri;
776     add $grp aio_close $dst_fh;
777     }
778     };
779     };
780 root 1.123
781     aioreq_pri $pri;
782 root 1.147 add $grp aio_utime $dst_fh, $stat[8], $stat[9], sub {
783     if ($_[0] < 0 && $! == ENOSYS) {
784     aioreq_pri $pri;
785     add $grp aio_utime $dst, $stat[8], $stat[9], $ch;
786     } else {
787     $ch->();
788     }
789     };
790 root 1.123 } else {
791     $grp->result (-1);
792     close $src_fh;
793     close $dst_fh;
794    
795     aioreq $pri;
796     add $grp aio_unlink $dst;
797     }
798     };
799     } else {
800     $grp->result (-1);
801     }
802     },
803 root 1.82
804 root 1.123 } else {
805     $grp->result (-1);
806     }
807     };
808 root 1.82
809 root 1.123 $grp
810 root 1.82 }
811    
812     =item aio_move $srcpath, $dstpath, $callback->($status)
813    
814     Try to move the I<file> (directories not supported as either source or
815     destination) from C<$srcpath> to C<$dstpath> and call the callback with
816 root 1.165 a status of C<0> (ok) or C<-1> (error, see C<$!>).
817 root 1.82
818 root 1.137 This is a composite request that tries to rename(2) the file first; if
819     rename fails with C<EXDEV>, it copies the file with C<aio_copy> and, if
820     that is successful, unlinks the C<$srcpath>.
821 root 1.82
822     =cut
823    
824     sub aio_move($$;$) {
825 root 1.123 my ($src, $dst, $cb) = @_;
826 root 1.82
827 root 1.123 my $pri = aioreq_pri;
828     my $grp = aio_group $cb;
829 root 1.82
830 root 1.123 aioreq_pri $pri;
831     add $grp aio_rename $src, $dst, sub {
832     if ($_[0] && $! == EXDEV) {
833     aioreq_pri $pri;
834     add $grp aio_copy $src, $dst, sub {
835     $grp->result ($_[0]);
836 root 1.95
837 root 1.123 if (!$_[0]) {
838     aioreq_pri $pri;
839     add $grp aio_unlink $src;
840     }
841     };
842     } else {
843     $grp->result ($_[0]);
844     }
845     };
846 root 1.82
847 root 1.123 $grp
848 root 1.82 }
849    
850 root 1.40 =item aio_scandir $path, $maxreq, $callback->($dirs, $nondirs)
851    
852 root 1.52 Scans a directory (similar to C<aio_readdir>) but additionally tries to
853 root 1.76 efficiently separate the entries of directory C<$path> into two sets of
854     names, directories you can recurse into (directories), and ones you cannot
855     recurse into (everything else, including symlinks to directories).
856 root 1.52
857 root 1.61 C<aio_scandir> is a composite request that creates of many sub requests_
858     C<$maxreq> specifies the maximum number of outstanding aio requests that
859     this function generates. If it is C<< <= 0 >>, then a suitable default
860 root 1.81 will be chosen (currently 4).
861 root 1.40
862     On error, the callback is called without arguments, otherwise it receives
863     two array-refs with path-relative entry names.
864    
865     Example:
866    
867     aio_scandir $dir, 0, sub {
868     my ($dirs, $nondirs) = @_;
869     print "real directories: @$dirs\n";
870     print "everything else: @$nondirs\n";
871     };
872    
873     Implementation notes.
874    
875     The C<aio_readdir> cannot be avoided, but C<stat()>'ing every entry can.
876    
877 root 1.149 If readdir returns file type information, then this is used directly to
878     find directories.
879    
880     Otherwise, after reading the directory, the modification time, size etc.
881     of the directory before and after the readdir is checked, and if they
882     match (and isn't the current time), the link count will be used to decide
883     how many entries are directories (if >= 2). Otherwise, no knowledge of the
884     number of subdirectories will be assumed.
885    
886     Then entries will be sorted into likely directories a non-initial dot
887     currently) and likely non-directories (see C<aio_readdirx>). Then every
888     entry plus an appended C</.> will be C<stat>'ed, likely directories first,
889     in order of their inode numbers. If that succeeds, it assumes that the
890     entry is a directory or a symlink to directory (which will be checked
891 root 1.52 seperately). This is often faster than stat'ing the entry itself because
892     filesystems might detect the type of the entry without reading the inode
893 root 1.149 data (e.g. ext2fs filetype feature), even on systems that cannot return
894     the filetype information on readdir.
895 root 1.52
896     If the known number of directories (link count - 2) has been reached, the
897     rest of the entries is assumed to be non-directories.
898    
899     This only works with certainty on POSIX (= UNIX) filesystems, which
900     fortunately are the vast majority of filesystems around.
901    
902     It will also likely work on non-POSIX filesystems with reduced efficiency
903     as those tend to return 0 or 1 as link counts, which disables the
904     directory counting heuristic.
905 root 1.40
906     =cut
907    
908 root 1.100 sub aio_scandir($$;$) {
909 root 1.123 my ($path, $maxreq, $cb) = @_;
910    
911     my $pri = aioreq_pri;
912 root 1.40
913 root 1.123 my $grp = aio_group $cb;
914 root 1.80
915 root 1.123 $maxreq = 4 if $maxreq <= 0;
916 root 1.55
917 root 1.123 # stat once
918     aioreq_pri $pri;
919     add $grp aio_stat $path, sub {
920     return $grp->result () if $_[0];
921     my $now = time;
922     my $hash1 = join ":", (stat _)[0,1,3,7,9];
923 root 1.40
924 root 1.123 # read the directory entries
925 root 1.80 aioreq_pri $pri;
926 root 1.148 add $grp aio_readdirx $path, READDIR_DIRS_FIRST, sub {
927 root 1.123 my $entries = shift
928     or return $grp->result ();
929 root 1.40
930 root 1.123 # stat the dir another time
931 root 1.80 aioreq_pri $pri;
932 root 1.123 add $grp aio_stat $path, sub {
933     my $hash2 = join ":", (stat _)[0,1,3,7,9];
934 root 1.95
935 root 1.123 my $ndirs;
936 root 1.95
937 root 1.123 # take the slow route if anything looks fishy
938     if ($hash1 ne $hash2 or (stat _)[9] == $now) {
939     $ndirs = -1;
940     } else {
941     # if nlink == 2, we are finished
942 root 1.150 # for non-posix-fs's, we rely on nlink < 2
943 root 1.123 $ndirs = (stat _)[3] - 2
944     or return $grp->result ([], $entries);
945     }
946    
947     my (@dirs, @nondirs);
948 root 1.40
949 root 1.123 my $statgrp = add $grp aio_group sub {
950     $grp->result (\@dirs, \@nondirs);
951     };
952 root 1.40
953 root 1.123 limit $statgrp $maxreq;
954     feed $statgrp sub {
955     return unless @$entries;
956 root 1.150 my $entry = shift @$entries;
957 root 1.40
958 root 1.123 aioreq_pri $pri;
959     add $statgrp aio_stat "$path/$entry/.", sub {
960     if ($_[0] < 0) {
961     push @nondirs, $entry;
962     } else {
963     # need to check for real directory
964     aioreq_pri $pri;
965     add $statgrp aio_lstat "$path/$entry", sub {
966     if (-d _) {
967     push @dirs, $entry;
968    
969     unless (--$ndirs) {
970     push @nondirs, @$entries;
971     feed $statgrp;
972 root 1.74 }
973 root 1.123 } else {
974     push @nondirs, $entry;
975 root 1.40 }
976     }
977 root 1.123 }
978 root 1.74 };
979 root 1.40 };
980     };
981     };
982 root 1.123 };
983 root 1.55
984 root 1.123 $grp
985 root 1.40 }
986    
987 root 1.99 =item aio_rmtree $path, $callback->($status)
988    
989 root 1.100 Delete a directory tree starting (and including) C<$path>, return the
990     status of the final C<rmdir> only. This is a composite request that
991     uses C<aio_scandir> to recurse into and rmdir directories, and unlink
992     everything else.
993 root 1.99
994     =cut
995    
996     sub aio_rmtree;
997 root 1.100 sub aio_rmtree($;$) {
998 root 1.123 my ($path, $cb) = @_;
999 root 1.99
1000 root 1.123 my $pri = aioreq_pri;
1001     my $grp = aio_group $cb;
1002 root 1.99
1003 root 1.123 aioreq_pri $pri;
1004     add $grp aio_scandir $path, 0, sub {
1005     my ($dirs, $nondirs) = @_;
1006 root 1.99
1007 root 1.123 my $dirgrp = aio_group sub {
1008     add $grp aio_rmdir $path, sub {
1009     $grp->result ($_[0]);
1010 root 1.99 };
1011 root 1.123 };
1012 root 1.99
1013 root 1.123 (aioreq_pri $pri), add $dirgrp aio_rmtree "$path/$_" for @$dirs;
1014     (aioreq_pri $pri), add $dirgrp aio_unlink "$path/$_" for @$nondirs;
1015 root 1.99
1016 root 1.123 add $grp $dirgrp;
1017     };
1018 root 1.99
1019 root 1.123 $grp
1020 root 1.99 }
1021    
1022 root 1.119 =item aio_sync $callback->($status)
1023    
1024     Asynchronously call sync and call the callback when finished.
1025    
1026 root 1.40 =item aio_fsync $fh, $callback->($status)
1027 root 1.1
1028     Asynchronously call fsync on the given filehandle and call the callback
1029     with the fsync result code.
1030    
1031 root 1.40 =item aio_fdatasync $fh, $callback->($status)
1032 root 1.1
1033     Asynchronously call fdatasync on the given filehandle and call the
1034 root 1.26 callback with the fdatasync result code.
1035    
1036     If this call isn't available because your OS lacks it or it couldn't be
1037     detected, it will be emulated by calling C<fsync> instead.
1038 root 1.1
1039 root 1.142 =item aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status)
1040    
1041     Sync the data portion of the file specified by C<$offset> and C<$length>
1042     to disk (but NOT the metadata), by calling the Linux-specific
1043     sync_file_range call. If sync_file_range is not available or it returns
1044     ENOSYS, then fdatasync or fsync is being substituted.
1045    
1046     C<$flags> can be a combination of C<IO::AIO::SYNC_FILE_RANGE_WAIT_BEFORE>,
1047     C<IO::AIO::SYNC_FILE_RANGE_WRITE> and
1048     C<IO::AIO::SYNC_FILE_RANGE_WAIT_AFTER>: refer to the sync_file_range
1049     manpage for details.
1050    
1051 root 1.120 =item aio_pathsync $path, $callback->($status)
1052    
1053     This request tries to open, fsync and close the given path. This is a
1054 root 1.135 composite request intended to sync directories after directory operations
1055 root 1.120 (E.g. rename). This might not work on all operating systems or have any
1056     specific effect, but usually it makes sure that directory changes get
1057     written to disc. It works for anything that can be opened for read-only,
1058     not just directories.
1059    
1060 root 1.162 Future versions of this function might fall back to other methods when
1061     C<fsync> on the directory fails (such as calling C<sync>).
1062    
1063 root 1.120 Passes C<0> when everything went ok, and C<-1> on error.
1064    
1065     =cut
1066    
1067     sub aio_pathsync($;$) {
1068 root 1.123 my ($path, $cb) = @_;
1069    
1070     my $pri = aioreq_pri;
1071     my $grp = aio_group $cb;
1072 root 1.120
1073 root 1.123 aioreq_pri $pri;
1074     add $grp aio_open $path, O_RDONLY, 0, sub {
1075     my ($fh) = @_;
1076     if ($fh) {
1077     aioreq_pri $pri;
1078     add $grp aio_fsync $fh, sub {
1079     $grp->result ($_[0]);
1080 root 1.120
1081     aioreq_pri $pri;
1082 root 1.123 add $grp aio_close $fh;
1083     };
1084     } else {
1085     $grp->result (-1);
1086     }
1087     };
1088 root 1.120
1089 root 1.123 $grp
1090 root 1.120 }
1091    
1092 root 1.170 =item aio_msync $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status)
1093    
1094     This is a rather advanced IO::AIO call, which only works on mmap(2)ed
1095 root 1.176 scalars (see the C<IO::AIO::mmap> function, although it also works on data
1096     scalars managed by the L<Sys::Mmap> or L<Mmap> modules, note that the
1097     scalar must only be modified in-place while an aio operation is pending on
1098     it).
1099 root 1.170
1100     It calls the C<msync> function of your OS, if available, with the memory
1101     area starting at C<$offset> in the string and ending C<$length> bytes
1102     later. If C<$length> is negative, counts from the end, and if C<$length>
1103     is C<undef>, then it goes till the end of the string. The flags can be
1104     a combination of C<IO::AIO::MS_ASYNC>, C<IO::AIO::MS_INVALIDATE> and
1105     C<IO::AIO::MS_SYNC>.
1106    
1107     =item aio_mtouch $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status)
1108    
1109     This is a rather advanced IO::AIO call, which works best on mmap(2)ed
1110     scalars.
1111    
1112     It touches (reads or writes) all memory pages in the specified
1113     range inside the scalar. All caveats and parameters are the same
1114     as for C<aio_msync>, above, except for flags, which must be either
1115     C<0> (which reads all pages and ensures they are instantiated) or
1116     C<IO::AIO::MT_MODIFY>, which modifies the memory page s(by reading and
1117     writing an octet from it, which dirties the page).
1118    
1119 root 1.182 =item aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status)
1120    
1121     This is a rather advanced IO::AIO call, which works best on mmap(2)ed
1122     scalars.
1123    
1124     It reads in all the pages of the underlying storage into memory (if any)
1125     and locks them, so they are not getting swapped/paged out or removed.
1126    
1127     If C<$length> is undefined, then the scalar will be locked till the end.
1128    
1129     On systems that do not implement C<mlock>, this function returns C<-1>
1130     and sets errno to C<ENOSYS>.
1131    
1132     Note that the corresponding C<munlock> is synchronous and is
1133     documented under L<MISCELLANEOUS FUNCTIONS>.
1134    
1135 root 1.183 Example: open a file, mmap and mlock it - both will be undone when
1136     C<$data> gets destroyed.
1137    
1138     open my $fh, "<", $path or die "$path: $!";
1139     my $data;
1140     IO::AIO::mmap $data, -s $fh, IO::AIO::PROT_READ, IO::AIO::MAP_SHARED, $fh;
1141     aio_mlock $data; # mlock in background
1142    
1143 root 1.182 =item aio_mlockall $flags, $callback->($status)
1144    
1145     Calls the C<mlockall> function with the given C<$flags> (a combination of
1146     C<IO::AIO::MCL_CURRENT> and C<IO::AIO::MCL_FUTURE>).
1147    
1148     On systems that do not implement C<mlockall>, this function returns C<-1>
1149     and sets errno to C<ENOSYS>.
1150    
1151     Note that the corresponding C<munlockall> is synchronous and is
1152     documented under L<MISCELLANEOUS FUNCTIONS>.
1153    
1154 root 1.183 Example: asynchronously lock all current and future pages into memory.
1155    
1156     aio_mlockall IO::AIO::MCL_FUTURE;
1157    
1158 root 1.58 =item aio_group $callback->(...)
1159 root 1.54
1160 root 1.55 This is a very special aio request: Instead of doing something, it is a
1161     container for other aio requests, which is useful if you want to bundle
1162 root 1.71 many requests into a single, composite, request with a definite callback
1163     and the ability to cancel the whole request with its subrequests.
1164 root 1.55
1165     Returns an object of class L<IO::AIO::GRP>. See its documentation below
1166     for more info.
1167    
1168     Example:
1169    
1170     my $grp = aio_group sub {
1171     print "all stats done\n";
1172     };
1173    
1174     add $grp
1175     (aio_stat ...),
1176     (aio_stat ...),
1177     ...;
1178    
1179 root 1.63 =item aio_nop $callback->()
1180    
1181     This is a special request - it does nothing in itself and is only used for
1182     side effects, such as when you want to add a dummy request to a group so
1183     that finishing the requests in the group depends on executing the given
1184     code.
1185    
1186 root 1.64 While this request does nothing, it still goes through the execution
1187     phase and still requires a worker thread. Thus, the callback will not
1188     be executed immediately but only after other requests in the queue have
1189     entered their execution phase. This can be used to measure request
1190     latency.
1191    
1192 root 1.71 =item IO::AIO::aio_busy $fractional_seconds, $callback->() *NOT EXPORTED*
1193 root 1.54
1194     Mainly used for debugging and benchmarking, this aio request puts one of
1195     the request workers to sleep for the given time.
1196    
1197 root 1.56 While it is theoretically handy to have simple I/O scheduling requests
1198 root 1.71 like sleep and file handle readable/writable, the overhead this creates is
1199     immense (it blocks a thread for a long time) so do not use this function
1200     except to put your application under artificial I/O pressure.
1201 root 1.56
1202 root 1.5 =back
1203    
1204 root 1.53 =head2 IO::AIO::REQ CLASS
1205 root 1.52
1206     All non-aggregate C<aio_*> functions return an object of this class when
1207     called in non-void context.
1208    
1209     =over 4
1210    
1211 root 1.65 =item cancel $req
1212 root 1.52
1213     Cancels the request, if possible. Has the effect of skipping execution
1214     when entering the B<execute> state and skipping calling the callback when
1215     entering the the B<result> state, but will leave the request otherwise
1216 root 1.151 untouched (with the exception of readdir). That means that requests that
1217     currently execute will not be stopped and resources held by the request
1218     will not be freed prematurely.
1219 root 1.52
1220 root 1.65 =item cb $req $callback->(...)
1221    
1222     Replace (or simply set) the callback registered to the request.
1223    
1224 root 1.52 =back
1225    
1226 root 1.55 =head2 IO::AIO::GRP CLASS
1227    
1228     This class is a subclass of L<IO::AIO::REQ>, so all its methods apply to
1229     objects of this class, too.
1230    
1231     A IO::AIO::GRP object is a special request that can contain multiple other
1232     aio requests.
1233    
1234     You create one by calling the C<aio_group> constructing function with a
1235     callback that will be called when all contained requests have entered the
1236     C<done> state:
1237    
1238     my $grp = aio_group sub {
1239     print "all requests are done\n";
1240     };
1241    
1242     You add requests by calling the C<add> method with one or more
1243     C<IO::AIO::REQ> objects:
1244    
1245     $grp->add (aio_unlink "...");
1246    
1247 root 1.58 add $grp aio_stat "...", sub {
1248     $_[0] or return $grp->result ("error");
1249    
1250     # add another request dynamically, if first succeeded
1251     add $grp aio_open "...", sub {
1252     $grp->result ("ok");
1253     };
1254     };
1255 root 1.55
1256     This makes it very easy to create composite requests (see the source of
1257     C<aio_move> for an application) that work and feel like simple requests.
1258    
1259 root 1.62 =over 4
1260    
1261     =item * The IO::AIO::GRP objects will be cleaned up during calls to
1262 root 1.55 C<IO::AIO::poll_cb>, just like any other request.
1263    
1264 root 1.62 =item * They can be canceled like any other request. Canceling will cancel not
1265 root 1.59 only the request itself, but also all requests it contains.
1266 root 1.55
1267 root 1.62 =item * They can also can also be added to other IO::AIO::GRP objects.
1268 root 1.55
1269 root 1.62 =item * You must not add requests to a group from within the group callback (or
1270 root 1.60 any later time).
1271    
1272 root 1.62 =back
1273    
1274 root 1.55 Their lifetime, simplified, looks like this: when they are empty, they
1275     will finish very quickly. If they contain only requests that are in the
1276     C<done> state, they will also finish. Otherwise they will continue to
1277     exist.
1278    
1279 root 1.133 That means after creating a group you have some time to add requests
1280     (precisely before the callback has been invoked, which is only done within
1281     the C<poll_cb>). And in the callbacks of those requests, you can add
1282     further requests to the group. And only when all those requests have
1283     finished will the the group itself finish.
1284 root 1.57
1285 root 1.55 =over 4
1286    
1287 root 1.65 =item add $grp ...
1288    
1289 root 1.55 =item $grp->add (...)
1290    
1291 root 1.57 Add one or more requests to the group. Any type of L<IO::AIO::REQ> can
1292     be added, including other groups, as long as you do not create circular
1293     dependencies.
1294    
1295     Returns all its arguments.
1296 root 1.55
1297 root 1.74 =item $grp->cancel_subs
1298    
1299     Cancel all subrequests and clears any feeder, but not the group request
1300     itself. Useful when you queued a lot of events but got a result early.
1301    
1302 root 1.168 The group request will finish normally (you cannot add requests to the
1303     group).
1304    
1305 root 1.58 =item $grp->result (...)
1306    
1307     Set the result value(s) that will be passed to the group callback when all
1308 root 1.120 subrequests have finished and set the groups errno to the current value
1309 root 1.80 of errno (just like calling C<errno> without an error number). By default,
1310     no argument will be passed and errno is zero.
1311    
1312     =item $grp->errno ([$errno])
1313    
1314     Sets the group errno value to C<$errno>, or the current value of errno
1315     when the argument is missing.
1316    
1317     Every aio request has an associated errno value that is restored when
1318     the callback is invoked. This method lets you change this value from its
1319     default (0).
1320    
1321     Calling C<result> will also set errno, so make sure you either set C<$!>
1322     before the call to C<result>, or call c<errno> after it.
1323 root 1.58
1324 root 1.65 =item feed $grp $callback->($grp)
1325 root 1.60
1326     Sets a feeder/generator on this group: every group can have an attached
1327     generator that generates requests if idle. The idea behind this is that,
1328     although you could just queue as many requests as you want in a group,
1329 root 1.139 this might starve other requests for a potentially long time. For example,
1330     C<aio_scandir> might generate hundreds of thousands C<aio_stat> requests,
1331     delaying any later requests for a long time.
1332 root 1.60
1333     To avoid this, and allow incremental generation of requests, you can
1334     instead a group and set a feeder on it that generates those requests. The
1335 root 1.68 feed callback will be called whenever there are few enough (see C<limit>,
1336 root 1.60 below) requests active in the group itself and is expected to queue more
1337     requests.
1338    
1339 root 1.68 The feed callback can queue as many requests as it likes (i.e. C<add> does
1340     not impose any limits).
1341 root 1.60
1342 root 1.65 If the feed does not queue more requests when called, it will be
1343 root 1.60 automatically removed from the group.
1344    
1345 root 1.138 If the feed limit is C<0> when this method is called, it will be set to
1346     C<2> automatically.
1347 root 1.60
1348     Example:
1349    
1350     # stat all files in @files, but only ever use four aio requests concurrently:
1351    
1352     my $grp = aio_group sub { print "finished\n" };
1353 root 1.68 limit $grp 4;
1354 root 1.65 feed $grp sub {
1355 root 1.60 my $file = pop @files
1356     or return;
1357    
1358     add $grp aio_stat $file, sub { ... };
1359 root 1.65 };
1360 root 1.60
1361 root 1.68 =item limit $grp $num
1362 root 1.60
1363     Sets the feeder limit for the group: The feeder will be called whenever
1364     the group contains less than this many requests.
1365    
1366     Setting the limit to C<0> will pause the feeding process.
1367    
1368 root 1.138 The default value for the limit is C<0>, but note that setting a feeder
1369     automatically bumps it up to C<2>.
1370    
1371 root 1.55 =back
1372    
1373 root 1.5 =head2 SUPPORT FUNCTIONS
1374    
1375 root 1.86 =head3 EVENT PROCESSING AND EVENT LOOP INTEGRATION
1376    
1377 root 1.5 =over 4
1378    
1379     =item $fileno = IO::AIO::poll_fileno
1380    
1381 root 1.20 Return the I<request result pipe file descriptor>. This filehandle must be
1382 root 1.156 polled for reading by some mechanism outside this module (e.g. EV, Glib,
1383     select and so on, see below or the SYNOPSIS). If the pipe becomes readable
1384     you have to call C<poll_cb> to check the results.
1385 root 1.5
1386     See C<poll_cb> for an example.
1387    
1388     =item IO::AIO::poll_cb
1389    
1390 root 1.86 Process some outstanding events on the result pipe. You have to call this
1391 root 1.128 regularly. Returns C<0> if all events could be processed, or C<-1> if it
1392     returned earlier for whatever reason. Returns immediately when no events
1393     are outstanding. The amount of events processed depends on the settings of
1394     C<IO::AIO::max_poll_req> and C<IO::AIO::max_poll_time>.
1395 root 1.5
1396 root 1.78 If not all requests were processed for whatever reason, the filehandle
1397 root 1.128 will still be ready when C<poll_cb> returns, so normally you don't have to
1398     do anything special to have it called later.
1399 root 1.78
1400 root 1.20 Example: Install an Event watcher that automatically calls
1401 root 1.156 IO::AIO::poll_cb with high priority (more examples can be found in the
1402     SYNOPSIS section, at the top of this document):
1403 root 1.5
1404     Event->io (fd => IO::AIO::poll_fileno,
1405     poll => 'r', async => 1,
1406     cb => \&IO::AIO::poll_cb);
1407    
1408 root 1.175 =item IO::AIO::poll_wait
1409    
1410     If there are any outstanding requests and none of them in the result
1411     phase, wait till the result filehandle becomes ready for reading (simply
1412     does a C<select> on the filehandle. This is useful if you want to
1413     synchronously wait for some requests to finish).
1414    
1415     See C<nreqs> for an example.
1416    
1417     =item IO::AIO::poll
1418    
1419     Waits until some requests have been handled.
1420    
1421     Returns the number of requests processed, but is otherwise strictly
1422     equivalent to:
1423    
1424     IO::AIO::poll_wait, IO::AIO::poll_cb
1425    
1426     =item IO::AIO::flush
1427    
1428     Wait till all outstanding AIO requests have been handled.
1429    
1430     Strictly equivalent to:
1431    
1432     IO::AIO::poll_wait, IO::AIO::poll_cb
1433     while IO::AIO::nreqs;
1434    
1435 root 1.86 =item IO::AIO::max_poll_reqs $nreqs
1436    
1437     =item IO::AIO::max_poll_time $seconds
1438    
1439     These set the maximum number of requests (default C<0>, meaning infinity)
1440     that are being processed by C<IO::AIO::poll_cb> in one call, respectively
1441     the maximum amount of time (default C<0>, meaning infinity) spent in
1442     C<IO::AIO::poll_cb> to process requests (more correctly the mininum amount
1443     of time C<poll_cb> is allowed to use).
1444 root 1.78
1445 root 1.89 Setting C<max_poll_time> to a non-zero value creates an overhead of one
1446     syscall per request processed, which is not normally a problem unless your
1447     callbacks are really really fast or your OS is really really slow (I am
1448     not mentioning Solaris here). Using C<max_poll_reqs> incurs no overhead.
1449    
1450 root 1.86 Setting these is useful if you want to ensure some level of
1451     interactiveness when perl is not fast enough to process all requests in
1452     time.
1453 root 1.78
1454 root 1.86 For interactive programs, values such as C<0.01> to C<0.1> should be fine.
1455 root 1.78
1456     Example: Install an Event watcher that automatically calls
1457 root 1.89 IO::AIO::poll_cb with low priority, to ensure that other parts of the
1458 root 1.78 program get the CPU sometimes even under high AIO load.
1459    
1460 root 1.86 # try not to spend much more than 0.1s in poll_cb
1461     IO::AIO::max_poll_time 0.1;
1462    
1463     # use a low priority so other tasks have priority
1464 root 1.78 Event->io (fd => IO::AIO::poll_fileno,
1465     poll => 'r', nice => 1,
1466 root 1.86 cb => &IO::AIO::poll_cb);
1467 root 1.78
1468 root 1.104 =back
1469    
1470 root 1.86 =head3 CONTROLLING THE NUMBER OF THREADS
1471 root 1.13
1472 root 1.105 =over
1473    
1474 root 1.5 =item IO::AIO::min_parallel $nthreads
1475    
1476 root 1.61 Set the minimum number of AIO threads to C<$nthreads>. The current
1477     default is C<8>, which means eight asynchronous operations can execute
1478     concurrently at any one time (the number of outstanding requests,
1479     however, is unlimited).
1480 root 1.5
1481 root 1.34 IO::AIO starts threads only on demand, when an AIO request is queued and
1482 root 1.86 no free thread exists. Please note that queueing up a hundred requests can
1483     create demand for a hundred threads, even if it turns out that everything
1484     is in the cache and could have been processed faster by a single thread.
1485 root 1.34
1486 root 1.61 It is recommended to keep the number of threads relatively low, as some
1487     Linux kernel versions will scale negatively with the number of threads
1488     (higher parallelity => MUCH higher latency). With current Linux 2.6
1489     versions, 4-32 threads should be fine.
1490 root 1.5
1491 root 1.34 Under most circumstances you don't need to call this function, as the
1492     module selects a default that is suitable for low to moderate load.
1493 root 1.5
1494     =item IO::AIO::max_parallel $nthreads
1495    
1496 root 1.34 Sets the maximum number of AIO threads to C<$nthreads>. If more than the
1497     specified number of threads are currently running, this function kills
1498     them. This function blocks until the limit is reached.
1499    
1500     While C<$nthreads> are zero, aio requests get queued but not executed
1501     until the number of threads has been increased again.
1502 root 1.5
1503     This module automatically runs C<max_parallel 0> at program end, to ensure
1504     that all threads are killed and that there are no outstanding requests.
1505    
1506     Under normal circumstances you don't need to call this function.
1507    
1508 root 1.86 =item IO::AIO::max_idle $nthreads
1509    
1510     Limit the number of threads (default: 4) that are allowed to idle (i.e.,
1511     threads that did not get a request to process within 10 seconds). That
1512     means if a thread becomes idle while C<$nthreads> other threads are also
1513     idle, it will free its resources and exit.
1514    
1515     This is useful when you allow a large number of threads (e.g. 100 or 1000)
1516     to allow for extremely high load situations, but want to free resources
1517     under normal circumstances (1000 threads can easily consume 30MB of RAM).
1518    
1519     The default is probably ok in most situations, especially if thread
1520     creation is fast. If thread creation is very slow on your system you might
1521     want to use larger values.
1522    
1523 root 1.123 =item IO::AIO::max_outstanding $maxreqs
1524 root 1.5
1525 root 1.79 This is a very bad function to use in interactive programs because it
1526     blocks, and a bad way to reduce concurrency because it is inexact: Better
1527     use an C<aio_group> together with a feed callback.
1528    
1529     Sets the maximum number of outstanding requests to C<$nreqs>. If you
1530 root 1.113 do queue up more than this number of requests, the next call to the
1531 root 1.79 C<poll_cb> (and C<poll_some> and other functions calling C<poll_cb>)
1532     function will block until the limit is no longer exceeded.
1533    
1534     The default value is very large, so there is no practical limit on the
1535     number of outstanding requests.
1536    
1537     You can still queue as many requests as you want. Therefore,
1538 root 1.123 C<max_outstanding> is mainly useful in simple scripts (with low values) or
1539 root 1.79 as a stop gap to shield against fatal memory overflow (with large values).
1540 root 1.5
1541 root 1.104 =back
1542    
1543 root 1.86 =head3 STATISTICAL INFORMATION
1544    
1545 root 1.104 =over
1546    
1547 root 1.86 =item IO::AIO::nreqs
1548    
1549     Returns the number of requests currently in the ready, execute or pending
1550     states (i.e. for which their callback has not been invoked yet).
1551    
1552     Example: wait till there are no outstanding requests anymore:
1553    
1554     IO::AIO::poll_wait, IO::AIO::poll_cb
1555     while IO::AIO::nreqs;
1556    
1557     =item IO::AIO::nready
1558    
1559     Returns the number of requests currently in the ready state (not yet
1560     executed).
1561    
1562     =item IO::AIO::npending
1563    
1564     Returns the number of requests currently in the pending state (executed,
1565     but not yet processed by poll_cb).
1566    
1567 root 1.5 =back
1568    
1569 root 1.157 =head3 MISCELLANEOUS FUNCTIONS
1570    
1571     IO::AIO implements some functions that might be useful, but are not
1572     asynchronous.
1573    
1574     =over 4
1575    
1576     =item IO::AIO::sendfile $ofh, $ifh, $offset, $count
1577    
1578     Calls the C<eio_sendfile_sync> function, which is like C<aio_sendfile>,
1579     but is blocking (this makes most sense if you know the input data is
1580     likely cached already and the output filehandle is set to non-blocking
1581     operations).
1582    
1583     Returns the number of bytes copied, or C<-1> on error.
1584    
1585     =item IO::AIO::fadvise $fh, $offset, $len, $advice
1586    
1587 root 1.184 Simply calls the C<posix_fadvise> function (see its
1588 root 1.157 manpage for details). The following advice constants are
1589     avaiable: C<IO::AIO::FADV_NORMAL>, C<IO::AIO::FADV_SEQUENTIAL>,
1590     C<IO::AIO::FADV_RANDOM>, C<IO::AIO::FADV_NOREUSE>,
1591     C<IO::AIO::FADV_WILLNEED>, C<IO::AIO::FADV_DONTNEED>.
1592    
1593     On systems that do not implement C<posix_fadvise>, this function returns
1594     ENOSYS, otherwise the return value of C<posix_fadvise>.
1595    
1596 root 1.184 =item IO::AIO::madvise $scalar, $offset, $len, $advice
1597    
1598     Simply calls the C<posix_madvise> function (see its
1599     manpage for details). The following advice constants are
1600     avaiable: C<IO::AIO::MADV_NORMAL>, C<IO::AIO::MADV_SEQUENTIAL>,
1601     C<IO::AIO::MADV_RANDOM>, C<IO::AIO::MADV_WILLNEED>, C<IO::AIO::MADV_DONTNEED>.
1602    
1603     On systems that do not implement C<posix_madvise>, this function returns
1604     ENOSYS, otherwise the return value of C<posix_madvise>.
1605    
1606     =item IO::AIO::mprotect $scalar, $offset, $len, $protect
1607    
1608     Simply calls the C<mprotect> function on the preferably AIO::mmap'ed
1609     $scalar (see its manpage for details). The following protect
1610     constants are avaiable: C<IO::AIO::PROT_NONE>, C<IO::AIO::PROT_READ>,
1611     C<IO::AIO::PROT_WRITE>, C<IO::AIO::PROT_EXEC>.
1612    
1613     On systems that do not implement C<mprotect>, this function returns
1614     ENOSYS, otherwise the return value of C<mprotect>.
1615    
1616 root 1.176 =item IO::AIO::mmap $scalar, $length, $prot, $flags, $fh[, $offset]
1617    
1618     Memory-maps a file (or anonymous memory range) and attaches it to the
1619     given C<$scalar>, which will act like a string scalar.
1620    
1621     The only operations allowed on the scalar are C<substr>/C<vec> that don't
1622     change the string length, and most read-only operations such as copying it
1623     or searching it with regexes and so on.
1624    
1625     Anything else is unsafe and will, at best, result in memory leaks.
1626    
1627     The memory map associated with the C<$scalar> is automatically removed
1628     when the C<$scalar> is destroyed, or when the C<IO::AIO::mmap> or
1629     C<IO::AIO::munmap> functions are called.
1630    
1631     This calls the C<mmap>(2) function internally. See your system's manual
1632     page for details on the C<$length>, C<$prot> and C<$flags> parameters.
1633    
1634     The C<$length> must be larger than zero and smaller than the actual
1635     filesize.
1636    
1637     C<$prot> is a combination of C<IO::AIO::PROT_NONE>, C<IO::AIO::PROT_EXEC>,
1638     C<IO::AIO::PROT_READ> and/or C<IO::AIO::PROT_WRITE>,
1639    
1640     C<$flags> can be a combination of C<IO::AIO::MAP_SHARED> or
1641     C<IO::AIO::MAP_PRIVATE>, or a number of system-specific flags (when
1642     not available, the are defined as 0): C<IO::AIO::MAP_ANONYMOUS>
1643     (which is set to C<MAP_ANON> if your system only provides this
1644     constant), C<IO::AIO::MAP_HUGETLB>, C<IO::AIO::MAP_LOCKED>,
1645     C<IO::AIO::MAP_NORESERVE>, C<IO::AIO::MAP_POPULATE> or
1646     C<IO::AIO::MAP_NONBLOCK>
1647    
1648     If C<$fh> is C<undef>, then a file descriptor of C<-1> is passed.
1649    
1650 root 1.179 C<$offset> is the offset from the start of the file - it generally must be
1651     a multiple of C<IO::AIO::PAGESIZE> and defaults to C<0>.
1652    
1653 root 1.177 Example:
1654    
1655     use Digest::MD5;
1656     use IO::AIO;
1657    
1658     open my $fh, "<verybigfile"
1659     or die "$!";
1660    
1661     IO::AIO::mmap my $data, -s $fh, IO::AIO::PROT_READ, IO::AIO::MAP_SHARED, $fh
1662     or die "verybigfile: $!";
1663    
1664     my $fast_md5 = md5 $data;
1665    
1666 root 1.176 =item IO::AIO::munmap $scalar
1667    
1668     Removes a previous mmap and undefines the C<$scalar>.
1669    
1670 root 1.182 =item IO::AIO::munlock $scalar, $offset = 0, $length = undef
1671 root 1.174
1672 root 1.182 Calls the C<munlock> function, undoing the effects of a previous
1673     C<aio_mlock> call (see its description for details).
1674 root 1.174
1675     =item IO::AIO::munlockall
1676    
1677     Calls the C<munlockall> function.
1678    
1679     On systems that do not implement C<munlockall>, this function returns
1680     ENOSYS, otherwise the return value of C<munlockall>.
1681    
1682 root 1.157 =back
1683    
1684 root 1.1 =cut
1685    
1686 root 1.61 min_parallel 8;
1687 root 1.1
1688 root 1.95 END { flush }
1689 root 1.82
1690 root 1.1 1;
1691    
1692 root 1.175 =head1 EVENT LOOP INTEGRATION
1693    
1694     It is recommended to use L<AnyEvent::AIO> to integrate IO::AIO
1695     automatically into many event loops:
1696    
1697     # AnyEvent integration (EV, Event, Glib, Tk, POE, urxvt, pureperl...)
1698     use AnyEvent::AIO;
1699    
1700     You can also integrate IO::AIO manually into many event loops, here are
1701     some examples of how to do this:
1702    
1703     # EV integration
1704     my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb;
1705    
1706     # Event integration
1707     Event->io (fd => IO::AIO::poll_fileno,
1708     poll => 'r',
1709     cb => \&IO::AIO::poll_cb);
1710    
1711     # Glib/Gtk2 integration
1712     add_watch Glib::IO IO::AIO::poll_fileno,
1713     in => sub { IO::AIO::poll_cb; 1 };
1714    
1715     # Tk integration
1716     Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
1717     readable => \&IO::AIO::poll_cb);
1718    
1719     # Danga::Socket integration
1720     Danga::Socket->AddOtherFds (IO::AIO::poll_fileno =>
1721     \&IO::AIO::poll_cb);
1722    
1723 root 1.27 =head2 FORK BEHAVIOUR
1724    
1725 root 1.52 This module should do "the right thing" when the process using it forks:
1726    
1727 root 1.34 Before the fork, IO::AIO enters a quiescent state where no requests
1728     can be added in other threads and no results will be processed. After
1729     the fork the parent simply leaves the quiescent state and continues
1730 root 1.72 request/result processing, while the child frees the request/result queue
1731     (so that the requests started before the fork will only be handled in the
1732     parent). Threads will be started on demand until the limit set in the
1733 root 1.34 parent process has been reached again.
1734 root 1.27
1735 root 1.52 In short: the parent will, after a short pause, continue as if fork had
1736     not been called, while the child will act as if IO::AIO has not been used
1737     yet.
1738    
1739 root 1.60 =head2 MEMORY USAGE
1740    
1741 root 1.72 Per-request usage:
1742    
1743     Each aio request uses - depending on your architecture - around 100-200
1744     bytes of memory. In addition, stat requests need a stat buffer (possibly
1745     a few hundred bytes), readdir requires a result buffer and so on. Perl
1746     scalars and other data passed into aio requests will also be locked and
1747     will consume memory till the request has entered the done state.
1748 root 1.60
1749 root 1.111 This is not awfully much, so queuing lots of requests is not usually a
1750 root 1.60 problem.
1751    
1752 root 1.72 Per-thread usage:
1753    
1754     In the execution phase, some aio requests require more memory for
1755     temporary buffers, and each thread requires a stack and other data
1756     structures (usually around 16k-128k, depending on the OS).
1757    
1758     =head1 KNOWN BUGS
1759    
1760 root 1.73 Known bugs will be fixed in the next release.
1761 root 1.60
1762 root 1.1 =head1 SEE ALSO
1763    
1764 root 1.125 L<AnyEvent::AIO> for easy integration into event loops, L<Coro::AIO> for a
1765     more natural syntax.
1766 root 1.1
1767     =head1 AUTHOR
1768    
1769     Marc Lehmann <schmorp@schmorp.de>
1770     http://home.schmorp.de/
1771    
1772     =cut
1773