ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.111
Committed: Mon Aug 13 12:08:13 2007 UTC (16 years, 9 months ago) by root
Branch: MAIN
Changes since 1.110: +1 -1 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 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     # AnyEvent integration
32 root 1.42 open my $fh, "<&=" . IO::AIO::poll_fileno or die "$!";
33     my $w = AnyEvent->io (fh => $fh, poll => 'r', cb => sub { IO::AIO::poll_cb });
34    
35 root 1.56 # Event integration
36 root 1.6 Event->io (fd => IO::AIO::poll_fileno,
37 root 1.7 poll => 'r',
38 root 1.6 cb => \&IO::AIO::poll_cb);
39    
40 root 1.56 # Glib/Gtk2 integration
41 root 1.6 add_watch Glib::IO IO::AIO::poll_fileno,
42 root 1.22 in => sub { IO::AIO::poll_cb; 1 };
43 root 1.6
44 root 1.56 # Tk integration
45 root 1.6 Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
46     readable => \&IO::AIO::poll_cb);
47    
48 root 1.56 # Danga::Socket integration
49 root 1.11 Danga::Socket->AddOtherFds (IO::AIO::poll_fileno =>
50     \&IO::AIO::poll_cb);
51    
52 root 1.1 =head1 DESCRIPTION
53    
54     This module implements asynchronous I/O using whatever means your
55 root 1.2 operating system supports.
56 root 1.1
57 root 1.85 Asynchronous means that operations that can normally block your program
58     (e.g. reading from disk) will be done asynchronously: the operation
59     will still block, but you can do something else in the meantime. This
60     is extremely useful for programs that need to stay interactive even
61     when doing heavy I/O (GUI programs, high performance network servers
62     etc.), but can also be used to easily do operations in parallel that are
63     normally done sequentially, e.g. stat'ing many files, which is much faster
64     on a RAID volume or over NFS when you do a number of stat operations
65     concurrently.
66    
67 root 1.108 While most of this works on all types of file descriptors (for
68     example sockets), using these functions on file descriptors that
69     support nonblocking operation (again, sockets, pipes etc.) is very
70     inefficient. Use an event loop for that (such as the L<Event|Event>
71     module): IO::AIO will naturally fit into such an event loop itself.
72 root 1.85
73 root 1.72 In this version, a number of threads are started that execute your
74     requests and signal their completion. You don't need thread support
75     in perl, and the threads created by this module will not be visible
76     to perl. In the future, this module might make use of the native aio
77     functions available on many operating systems. However, they are often
78 root 1.85 not well-supported or restricted (GNU/Linux doesn't allow them on normal
79 root 1.72 files currently, for example), and they would only support aio_read and
80     aio_write, so the remaining functionality would have to be implemented
81     using threads anyway.
82    
83 root 1.108 Although the module will work in the presence of other (Perl-) threads,
84     it is currently not reentrant in any way, so use appropriate locking
85     yourself, always call C<poll_cb> from within the same thread, or never
86     call C<poll_cb> (or other C<aio_> functions) recursively.
87 root 1.72
88 root 1.86 =head2 EXAMPLE
89    
90     This is a simple example that uses the Event module and loads
91     F</etc/passwd> asynchronously:
92    
93     use Fcntl;
94     use Event;
95     use IO::AIO;
96    
97     # register the IO::AIO callback with Event
98     Event->io (fd => IO::AIO::poll_fileno,
99     poll => 'r',
100     cb => \&IO::AIO::poll_cb);
101    
102     # queue the request to open /etc/passwd
103     aio_open "/etc/passwd", O_RDONLY, 0, sub {
104 root 1.94 my $fh = shift
105 root 1.86 or die "error while opening: $!";
106    
107     # stat'ing filehandles is generally non-blocking
108     my $size = -s $fh;
109    
110     # queue a request to read the file
111     my $contents;
112     aio_read $fh, 0, $size, $contents, 0, sub {
113     $_[0] == $size
114     or die "short read: $!";
115    
116     close $fh;
117    
118     # file contents now in $contents
119     print $contents;
120    
121     # exit event loop and program
122     Event::unloop;
123     };
124     };
125    
126     # possibly queue up other requests, or open GUI windows,
127     # check for sockets etc. etc.
128    
129     # process events as long as there are some:
130     Event::loop;
131    
132 root 1.72 =head1 REQUEST ANATOMY AND LIFETIME
133    
134     Every C<aio_*> function creates a request. which is a C data structure not
135     directly visible to Perl.
136    
137     If called in non-void context, every request function returns a Perl
138     object representing the request. In void context, nothing is returned,
139     which saves a bit of memory.
140    
141     The perl object is a fairly standard ref-to-hash object. The hash contents
142     are not used by IO::AIO so you are free to store anything you like in it.
143    
144     During their existance, aio requests travel through the following states,
145     in order:
146    
147     =over 4
148    
149     =item ready
150    
151     Immediately after a request is created it is put into the ready state,
152     waiting for a thread to execute it.
153    
154     =item execute
155    
156     A thread has accepted the request for processing and is currently
157     executing it (e.g. blocking in read).
158    
159     =item pending
160    
161     The request has been executed and is waiting for result processing.
162    
163     While request submission and execution is fully asynchronous, result
164     processing is not and relies on the perl interpreter calling C<poll_cb>
165     (or another function with the same effect).
166    
167     =item result
168    
169     The request results are processed synchronously by C<poll_cb>.
170    
171     The C<poll_cb> function will process all outstanding aio requests by
172     calling their callbacks, freeing memory associated with them and managing
173     any groups they are contained in.
174    
175     =item done
176    
177     Request has reached the end of its lifetime and holds no resources anymore
178     (except possibly for the Perl object, but its connection to the actual
179     aio request is severed and calling its methods will either do nothing or
180     result in a runtime error).
181 root 1.1
182 root 1.88 =back
183    
184 root 1.1 =cut
185    
186     package IO::AIO;
187    
188 root 1.23 no warnings;
189 root 1.51 use strict 'vars';
190 root 1.23
191 root 1.1 use base 'Exporter';
192    
193     BEGIN {
194 root 1.106 our $VERSION = '2.4';
195 root 1.1
196 root 1.67 our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close aio_stat
197     aio_lstat aio_unlink aio_rmdir aio_readdir aio_scandir aio_symlink
198 root 1.90 aio_readlink aio_fsync aio_fdatasync aio_readahead aio_rename aio_link
199 root 1.106 aio_move aio_copy aio_group aio_nop aio_mknod aio_load aio_rmtree aio_mkdir
200 root 1.110 aio_chown aio_chmod aio_utime aio_truncate);
201 root 1.95 our @EXPORT = (@AIO_REQ, qw(aioreq_pri aioreq_nice aio_block));
202 root 1.67 our @EXPORT_OK = qw(poll_fileno poll_cb poll_wait flush
203 root 1.86 min_parallel max_parallel max_idle
204     nreqs nready npending nthreads
205     max_poll_time max_poll_reqs);
206 root 1.1
207 root 1.54 @IO::AIO::GRP::ISA = 'IO::AIO::REQ';
208    
209 root 1.1 require XSLoader;
210 root 1.51 XSLoader::load ("IO::AIO", $VERSION);
211 root 1.1 }
212    
213 root 1.5 =head1 FUNCTIONS
214 root 1.1
215 root 1.87 =head2 AIO REQUEST FUNCTIONS
216 root 1.1
217 root 1.5 All the C<aio_*> calls are more or less thin wrappers around the syscall
218     with the same name (sans C<aio_>). The arguments are similar or identical,
219 root 1.14 and they all accept an additional (and optional) C<$callback> argument
220     which must be a code reference. This code reference will get called with
221     the syscall return code (e.g. most syscalls return C<-1> on error, unlike
222     perl, which usually delivers "false") as it's sole argument when the given
223     syscall has been executed asynchronously.
224 root 1.1
225 root 1.23 All functions expecting a filehandle keep a copy of the filehandle
226     internally until the request has finished.
227 root 1.1
228 root 1.87 All functions return request objects of type L<IO::AIO::REQ> that allow
229     further manipulation of those requests while they are in-flight.
230 root 1.52
231 root 1.28 The pathnames you pass to these routines I<must> be absolute and
232 root 1.87 encoded as octets. The reason for the former is that at the time the
233 root 1.28 request is being executed, the current working directory could have
234     changed. Alternatively, you can make sure that you never change the
235 root 1.87 current working directory anywhere in the program and then use relative
236     paths.
237 root 1.28
238 root 1.87 To encode pathnames as octets, either make sure you either: a) always pass
239     in filenames you got from outside (command line, readdir etc.) without
240     tinkering, b) are ASCII or ISO 8859-1, c) use the Encode module and encode
241 root 1.28 your pathnames to the locale (or other) encoding in effect in the user
242     environment, d) use Glib::filename_from_unicode on unicode filenames or e)
243 root 1.87 use something else to ensure your scalar has the correct contents.
244    
245     This works, btw. independent of the internal UTF-8 bit, which IO::AIO
246     handles correctly wether it is set or not.
247 root 1.1
248 root 1.5 =over 4
249 root 1.1
250 root 1.80 =item $prev_pri = aioreq_pri [$pri]
251 root 1.68
252 root 1.80 Returns the priority value that would be used for the next request and, if
253     C<$pri> is given, sets the priority for the next aio request.
254 root 1.68
255 root 1.80 The default priority is C<0>, the minimum and maximum priorities are C<-4>
256     and C<4>, respectively. Requests with higher priority will be serviced
257     first.
258    
259     The priority will be reset to C<0> after each call to one of the C<aio_*>
260 root 1.68 functions.
261    
262 root 1.69 Example: open a file with low priority, then read something from it with
263     higher priority so the read request is serviced before other low priority
264     open requests (potentially spamming the cache):
265    
266     aioreq_pri -3;
267     aio_open ..., sub {
268     return unless $_[0];
269    
270     aioreq_pri -2;
271     aio_read $_[0], ..., sub {
272     ...
273     };
274     };
275    
276 root 1.106
277 root 1.69 =item aioreq_nice $pri_adjust
278    
279     Similar to C<aioreq_pri>, but subtracts the given value from the current
280 root 1.87 priority, so the effect is cumulative.
281 root 1.69
282 root 1.106
283 root 1.40 =item aio_open $pathname, $flags, $mode, $callback->($fh)
284 root 1.1
285 root 1.2 Asynchronously open or create a file and call the callback with a newly
286     created filehandle for the file.
287 root 1.1
288     The pathname passed to C<aio_open> must be absolute. See API NOTES, above,
289     for an explanation.
290    
291 root 1.20 The C<$flags> argument is a bitmask. See the C<Fcntl> module for a
292     list. They are the same as used by C<sysopen>.
293    
294     Likewise, C<$mode> specifies the mode of the newly created file, if it
295     didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>,
296     except that it is mandatory (i.e. use C<0> if you don't create new files,
297 root 1.101 and C<0666> or C<0777> if you do). Note that the C<$mode> will be modified
298     by the umask in effect then the request is being executed, so better never
299     change the umask.
300 root 1.1
301     Example:
302    
303     aio_open "/etc/passwd", O_RDONLY, 0, sub {
304 root 1.2 if ($_[0]) {
305     print "open successful, fh is $_[0]\n";
306 root 1.1 ...
307     } else {
308     die "open failed: $!\n";
309     }
310     };
311    
312 root 1.106
313 root 1.40 =item aio_close $fh, $callback->($status)
314 root 1.1
315 root 1.2 Asynchronously close a file and call the callback with the result
316     code. I<WARNING:> although accepted, you should not pass in a perl
317 root 1.20 filehandle here, as perl will likely close the file descriptor another
318     time when the filehandle is destroyed. Normally, you can safely call perls
319     C<close> or just let filehandles go out of scope.
320    
321     This is supposed to be a bug in the API, so that might change. It's
322     therefore best to avoid this function.
323 root 1.1
324 root 1.106
325 root 1.40 =item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
326 root 1.1
327 root 1.40 =item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
328 root 1.1
329 root 1.109 Reads or writes C<$length> bytes from the specified C<$fh> and C<$offset>
330     into the scalar given by C<$data> and offset C<$dataoffset> and calls the
331 root 1.1 callback without the actual number of bytes read (or -1 on error, just
332 root 1.109 like the syscall).
333    
334     If C<$offset> is undefined, then the current file offset will be used (and
335     updated), otherwise the file offset will not be changed by these calls.
336    
337     If C<$length> is undefined in C<aio_write>, use the remaining length of C<$data>.
338    
339     If C<$dataoffset> is less than zero, it will be counted from the end of
340     C<$data>.
341 root 1.1
342 root 1.31 The C<$data> scalar I<MUST NOT> be modified in any way while the request
343 root 1.108 is outstanding. Modifying it can result in segfaults or World War III (if
344     the necessary/optional hardware is installed).
345 root 1.31
346 root 1.17 Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at
347 root 1.1 offset C<0> within the scalar:
348    
349     aio_read $fh, 7, 15, $buffer, 0, sub {
350 root 1.9 $_[0] > 0 or die "read error: $!";
351     print "read $_[0] bytes: <$buffer>\n";
352 root 1.1 };
353    
354 root 1.106
355 root 1.40 =item aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
356 root 1.35
357     Tries to copy C<$length> bytes from C<$in_fh> to C<$out_fh>. It starts
358     reading at byte offset C<$in_offset>, and starts writing at the current
359     file offset of C<$out_fh>. Because of that, it is not safe to issue more
360     than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each
361     other.
362    
363     This call tries to make use of a native C<sendfile> syscall to provide
364     zero-copy operation. For this to work, C<$out_fh> should refer to a
365     socket, and C<$in_fh> should refer to mmap'able file.
366    
367     If the native sendfile call fails or is not implemented, it will be
368 root 1.36 emulated, so you can call C<aio_sendfile> on any type of filehandle
369     regardless of the limitations of the operating system.
370 root 1.35
371     Please note, however, that C<aio_sendfile> can read more bytes from
372     C<$in_fh> than are written, and there is no way to find out how many
373 root 1.36 bytes have been read from C<aio_sendfile> alone, as C<aio_sendfile> only
374     provides the number of bytes written to C<$out_fh>. Only if the result
375     value equals C<$length> one can assume that C<$length> bytes have been
376     read.
377 root 1.35
378 root 1.106
379 root 1.40 =item aio_readahead $fh,$offset,$length, $callback->($retval)
380 root 1.1
381 root 1.20 C<aio_readahead> populates the page cache with data from a file so that
382 root 1.1 subsequent reads from that file will not block on disk I/O. The C<$offset>
383     argument specifies the starting point from which data is to be read and
384     C<$length> specifies the number of bytes to be read. I/O is performed in
385     whole pages, so that offset is effectively rounded down to a page boundary
386     and bytes are read up to the next page boundary greater than or equal to
387 root 1.20 (off-set+length). C<aio_readahead> does not read beyond the end of the
388 root 1.1 file. The current file offset of the file is left unchanged.
389    
390 root 1.26 If that syscall doesn't exist (likely if your OS isn't Linux) it will be
391     emulated by simply reading the data, which would have a similar effect.
392    
393 root 1.106
394 root 1.40 =item aio_stat $fh_or_path, $callback->($status)
395 root 1.1
396 root 1.40 =item aio_lstat $fh, $callback->($status)
397 root 1.1
398     Works like perl's C<stat> or C<lstat> in void context. The callback will
399     be called after the stat and the results will be available using C<stat _>
400     or C<-s _> etc...
401    
402     The pathname passed to C<aio_stat> must be absolute. See API NOTES, above,
403     for an explanation.
404    
405     Currently, the stats are always 64-bit-stats, i.e. instead of returning an
406     error when stat'ing a large file, the results will be silently truncated
407     unless perl itself is compiled with large file support.
408    
409     Example: Print the length of F</etc/passwd>:
410    
411     aio_stat "/etc/passwd", sub {
412     $_[0] and die "stat failed: $!";
413     print "size is ", -s _, "\n";
414     };
415    
416 root 1.106
417     =item aio_utime $fh_or_path, $atime, $mtime, $callback->($status)
418    
419     Works like perl's C<utime> function (including the special case of $atime
420     and $mtime being undef). Fractional times are supported if the underlying
421     syscalls support them.
422    
423     When called with a pathname, uses utimes(2) if available, otherwise
424     utime(2). If called on a file descriptor, uses futimes(2) if available,
425     otherwise returns ENOSYS, so this is not portable.
426    
427     Examples:
428    
429 root 1.107 # set atime and mtime to current time (basically touch(1)):
430 root 1.106 aio_utime "path", undef, undef;
431     # set atime to current time and mtime to beginning of the epoch:
432     aio_utime "path", time, undef; # undef==0
433    
434    
435     =item aio_chown $fh_or_path, $uid, $gid, $callback->($status)
436    
437     Works like perl's C<chown> function, except that C<undef> for either $uid
438     or $gid is being interpreted as "do not change" (but -1 can also be used).
439    
440     Examples:
441    
442     # same as "chown root path" in the shell:
443     aio_chown "path", 0, -1;
444     # same as above:
445     aio_chown "path", 0, undef;
446    
447    
448 root 1.110 =item aio_truncate $fh_or_path, $offset, $callback->($status)
449    
450     Works like truncate(2) or ftruncate(2).
451    
452    
453 root 1.106 =item aio_chmod $fh_or_path, $mode, $callback->($status)
454    
455     Works like perl's C<chmod> function.
456    
457    
458 root 1.40 =item aio_unlink $pathname, $callback->($status)
459 root 1.1
460     Asynchronously unlink (delete) a file and call the callback with the
461     result code.
462    
463 root 1.106
464 root 1.82 =item aio_mknod $path, $mode, $dev, $callback->($status)
465    
466 root 1.86 [EXPERIMENTAL]
467    
468 root 1.83 Asynchronously create a device node (or fifo). See mknod(2).
469    
470 root 1.86 The only (POSIX-) portable way of calling this function is:
471 root 1.83
472     aio_mknod $path, IO::AIO::S_IFIFO | $mode, 0, sub { ...
473 root 1.82
474 root 1.106
475 root 1.50 =item aio_link $srcpath, $dstpath, $callback->($status)
476    
477     Asynchronously create a new link to the existing object at C<$srcpath> at
478     the path C<$dstpath> and call the callback with the result code.
479    
480 root 1.106
481 root 1.50 =item aio_symlink $srcpath, $dstpath, $callback->($status)
482    
483     Asynchronously create a new symbolic link to the existing object at C<$srcpath> at
484     the path C<$dstpath> and call the callback with the result code.
485    
486 root 1.106
487 root 1.90 =item aio_readlink $path, $callback->($link)
488    
489     Asynchronously read the symlink specified by C<$path> and pass it to
490     the callback. If an error occurs, nothing or undef gets passed to the
491     callback.
492    
493 root 1.106
494 root 1.50 =item aio_rename $srcpath, $dstpath, $callback->($status)
495    
496     Asynchronously rename the object at C<$srcpath> to C<$dstpath>, just as
497     rename(2) and call the callback with the result code.
498    
499 root 1.106
500 root 1.101 =item aio_mkdir $pathname, $mode, $callback->($status)
501    
502     Asynchronously mkdir (create) a directory and call the callback with
503     the result code. C<$mode> will be modified by the umask at the time the
504     request is executed, so do not change your umask.
505    
506 root 1.106
507 root 1.40 =item aio_rmdir $pathname, $callback->($status)
508 root 1.27
509     Asynchronously rmdir (delete) a directory and call the callback with the
510     result code.
511    
512 root 1.106
513 root 1.46 =item aio_readdir $pathname, $callback->($entries)
514 root 1.37
515     Unlike the POSIX call of the same name, C<aio_readdir> reads an entire
516     directory (i.e. opendir + readdir + closedir). The entries will not be
517     sorted, and will B<NOT> include the C<.> and C<..> entries.
518    
519     The callback a single argument which is either C<undef> or an array-ref
520     with the filenames.
521    
522 root 1.106
523 root 1.98 =item aio_load $path, $data, $callback->($status)
524    
525     This is a composite request that tries to fully load the given file into
526     memory. Status is the same as with aio_read.
527    
528     =cut
529    
530     sub aio_load($$;$) {
531     aio_block {
532     my ($path, undef, $cb) = @_;
533     my $data = \$_[1];
534    
535     my $pri = aioreq_pri;
536     my $grp = aio_group $cb;
537    
538     aioreq_pri $pri;
539     add $grp aio_open $path, O_RDONLY, 0, sub {
540 root 1.102 my $fh = shift
541 root 1.98 or return $grp->result (-1);
542    
543     aioreq_pri $pri;
544     add $grp aio_read $fh, 0, (-s $fh), $$data, 0, sub {
545     $grp->result ($_[0]);
546     };
547     };
548    
549     $grp
550     }
551     }
552    
553 root 1.82 =item aio_copy $srcpath, $dstpath, $callback->($status)
554    
555     Try to copy the I<file> (directories not supported as either source or
556     destination) from C<$srcpath> to C<$dstpath> and call the callback with
557     the C<0> (error) or C<-1> ok.
558    
559     This is a composite request that it creates the destination file with
560     mode 0200 and copies the contents of the source file into it using
561     C<aio_sendfile>, followed by restoring atime, mtime, access mode and
562     uid/gid, in that order.
563    
564     If an error occurs, the partial destination file will be unlinked, if
565     possible, except when setting atime, mtime, access mode and uid/gid, where
566     errors are being ignored.
567    
568     =cut
569    
570     sub aio_copy($$;$) {
571 root 1.95 aio_block {
572     my ($src, $dst, $cb) = @_;
573 root 1.82
574 root 1.95 my $pri = aioreq_pri;
575     my $grp = aio_group $cb;
576 root 1.82
577 root 1.95 aioreq_pri $pri;
578     add $grp aio_open $src, O_RDONLY, 0, sub {
579     if (my $src_fh = $_[0]) {
580     my @stat = stat $src_fh;
581    
582     aioreq_pri $pri;
583     add $grp aio_open $dst, O_CREAT | O_WRONLY | O_TRUNC, 0200, sub {
584     if (my $dst_fh = $_[0]) {
585     aioreq_pri $pri;
586     add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub {
587     if ($_[0] == $stat[7]) {
588     $grp->result (0);
589     close $src_fh;
590    
591     # those should not normally block. should. should.
592     utime $stat[8], $stat[9], $dst;
593     chmod $stat[2] & 07777, $dst_fh;
594     chown $stat[4], $stat[5], $dst_fh;
595     close $dst_fh;
596     } else {
597     $grp->result (-1);
598     close $src_fh;
599     close $dst_fh;
600 root 1.82
601 root 1.95 aioreq $pri;
602     add $grp aio_unlink $dst;
603     }
604     };
605     } else {
606     $grp->result (-1);
607     }
608     },
609    
610     } else {
611     $grp->result (-1);
612     }
613     };
614 root 1.82
615 root 1.95 $grp
616     }
617 root 1.82 }
618    
619     =item aio_move $srcpath, $dstpath, $callback->($status)
620    
621     Try to move the I<file> (directories not supported as either source or
622     destination) from C<$srcpath> to C<$dstpath> and call the callback with
623     the C<0> (error) or C<-1> ok.
624    
625     This is a composite request that tries to rename(2) the file first. If
626     rename files with C<EXDEV>, it copies the file with C<aio_copy> and, if
627     that is successful, unlinking the C<$srcpath>.
628    
629     =cut
630    
631     sub aio_move($$;$) {
632 root 1.95 aio_block {
633     my ($src, $dst, $cb) = @_;
634 root 1.82
635 root 1.95 my $pri = aioreq_pri;
636     my $grp = aio_group $cb;
637 root 1.82
638 root 1.95 aioreq_pri $pri;
639     add $grp aio_rename $src, $dst, sub {
640     if ($_[0] && $! == EXDEV) {
641     aioreq_pri $pri;
642     add $grp aio_copy $src, $dst, sub {
643     $grp->result ($_[0]);
644    
645     if (!$_[0]) {
646     aioreq_pri $pri;
647     add $grp aio_unlink $src;
648     }
649     };
650     } else {
651 root 1.82 $grp->result ($_[0]);
652 root 1.95 }
653     };
654 root 1.82
655 root 1.95 $grp
656     }
657 root 1.82 }
658    
659 root 1.40 =item aio_scandir $path, $maxreq, $callback->($dirs, $nondirs)
660    
661 root 1.52 Scans a directory (similar to C<aio_readdir>) but additionally tries to
662 root 1.76 efficiently separate the entries of directory C<$path> into two sets of
663     names, directories you can recurse into (directories), and ones you cannot
664     recurse into (everything else, including symlinks to directories).
665 root 1.52
666 root 1.61 C<aio_scandir> is a composite request that creates of many sub requests_
667     C<$maxreq> specifies the maximum number of outstanding aio requests that
668     this function generates. If it is C<< <= 0 >>, then a suitable default
669 root 1.81 will be chosen (currently 4).
670 root 1.40
671     On error, the callback is called without arguments, otherwise it receives
672     two array-refs with path-relative entry names.
673    
674     Example:
675    
676     aio_scandir $dir, 0, sub {
677     my ($dirs, $nondirs) = @_;
678     print "real directories: @$dirs\n";
679     print "everything else: @$nondirs\n";
680     };
681    
682     Implementation notes.
683    
684     The C<aio_readdir> cannot be avoided, but C<stat()>'ing every entry can.
685    
686     After reading the directory, the modification time, size etc. of the
687 root 1.52 directory before and after the readdir is checked, and if they match (and
688     isn't the current time), the link count will be used to decide how many
689     entries are directories (if >= 2). Otherwise, no knowledge of the number
690     of subdirectories will be assumed.
691    
692     Then entries will be sorted into likely directories (everything without
693     a non-initial dot currently) and likely non-directories (everything
694     else). Then every entry plus an appended C</.> will be C<stat>'ed,
695     likely directories first. If that succeeds, it assumes that the entry
696     is a directory or a symlink to directory (which will be checked
697     seperately). This is often faster than stat'ing the entry itself because
698     filesystems might detect the type of the entry without reading the inode
699     data (e.g. ext2fs filetype feature).
700    
701     If the known number of directories (link count - 2) has been reached, the
702     rest of the entries is assumed to be non-directories.
703    
704     This only works with certainty on POSIX (= UNIX) filesystems, which
705     fortunately are the vast majority of filesystems around.
706    
707     It will also likely work on non-POSIX filesystems with reduced efficiency
708     as those tend to return 0 or 1 as link counts, which disables the
709     directory counting heuristic.
710 root 1.40
711     =cut
712    
713 root 1.100 sub aio_scandir($$;$) {
714 root 1.95 aio_block {
715     my ($path, $maxreq, $cb) = @_;
716 root 1.40
717 root 1.95 my $pri = aioreq_pri;
718 root 1.80
719 root 1.95 my $grp = aio_group $cb;
720 root 1.55
721 root 1.95 $maxreq = 4 if $maxreq <= 0;
722 root 1.40
723 root 1.95 # stat once
724 root 1.80 aioreq_pri $pri;
725 root 1.95 add $grp aio_stat $path, sub {
726     return $grp->result () if $_[0];
727     my $now = time;
728     my $hash1 = join ":", (stat _)[0,1,3,7,9];
729 root 1.40
730 root 1.95 # read the directory entries
731 root 1.80 aioreq_pri $pri;
732 root 1.95 add $grp aio_readdir $path, sub {
733     my $entries = shift
734     or return $grp->result ();
735    
736     # stat the dir another time
737     aioreq_pri $pri;
738     add $grp aio_stat $path, sub {
739     my $hash2 = join ":", (stat _)[0,1,3,7,9];
740    
741     my $ndirs;
742    
743     # take the slow route if anything looks fishy
744     if ($hash1 ne $hash2 or (stat _)[9] == $now) {
745     $ndirs = -1;
746     } else {
747     # if nlink == 2, we are finished
748     # on non-posix-fs's, we rely on nlink < 2
749     $ndirs = (stat _)[3] - 2
750     or return $grp->result ([], $entries);
751     }
752    
753     # sort into likely dirs and likely nondirs
754     # dirs == files without ".", short entries first
755     $entries = [map $_->[0],
756     sort { $b->[1] cmp $a->[1] }
757     map [$_, sprintf "%s%04d", (/.\./ ? "1" : "0"), length],
758     @$entries];
759 root 1.40
760 root 1.95 my (@dirs, @nondirs);
761 root 1.40
762 root 1.95 my $statgrp = add $grp aio_group sub {
763     $grp->result (\@dirs, \@nondirs);
764     };
765 root 1.40
766 root 1.95 limit $statgrp $maxreq;
767     feed $statgrp sub {
768     return unless @$entries;
769     my $entry = pop @$entries;
770    
771     aioreq_pri $pri;
772     add $statgrp aio_stat "$path/$entry/.", sub {
773     if ($_[0] < 0) {
774     push @nondirs, $entry;
775     } else {
776     # need to check for real directory
777     aioreq_pri $pri;
778     add $statgrp aio_lstat "$path/$entry", sub {
779     if (-d _) {
780     push @dirs, $entry;
781    
782     unless (--$ndirs) {
783     push @nondirs, @$entries;
784     feed $statgrp;
785     }
786     } else {
787     push @nondirs, $entry;
788 root 1.74 }
789 root 1.40 }
790     }
791 root 1.95 };
792 root 1.74 };
793 root 1.40 };
794     };
795     };
796 root 1.55
797 root 1.95 $grp
798     }
799 root 1.40 }
800    
801 root 1.99 =item aio_rmtree $path, $callback->($status)
802    
803 root 1.100 Delete a directory tree starting (and including) C<$path>, return the
804     status of the final C<rmdir> only. This is a composite request that
805     uses C<aio_scandir> to recurse into and rmdir directories, and unlink
806     everything else.
807 root 1.99
808     =cut
809    
810     sub aio_rmtree;
811 root 1.100 sub aio_rmtree($;$) {
812 root 1.99 aio_block {
813     my ($path, $cb) = @_;
814    
815     my $pri = aioreq_pri;
816     my $grp = aio_group $cb;
817    
818     aioreq_pri $pri;
819     add $grp aio_scandir $path, 0, sub {
820     my ($dirs, $nondirs) = @_;
821    
822     my $dirgrp = aio_group sub {
823     add $grp aio_rmdir $path, sub {
824     $grp->result ($_[0]);
825     };
826     };
827    
828     (aioreq_pri $pri), add $dirgrp aio_rmtree "$path/$_" for @$dirs;
829     (aioreq_pri $pri), add $dirgrp aio_unlink "$path/$_" for @$nondirs;
830    
831     add $grp $dirgrp;
832     };
833    
834     $grp
835     }
836     }
837    
838 root 1.40 =item aio_fsync $fh, $callback->($status)
839 root 1.1
840     Asynchronously call fsync on the given filehandle and call the callback
841     with the fsync result code.
842    
843 root 1.40 =item aio_fdatasync $fh, $callback->($status)
844 root 1.1
845     Asynchronously call fdatasync on the given filehandle and call the
846 root 1.26 callback with the fdatasync result code.
847    
848     If this call isn't available because your OS lacks it or it couldn't be
849     detected, it will be emulated by calling C<fsync> instead.
850 root 1.1
851 root 1.58 =item aio_group $callback->(...)
852 root 1.54
853 root 1.55 This is a very special aio request: Instead of doing something, it is a
854     container for other aio requests, which is useful if you want to bundle
855 root 1.71 many requests into a single, composite, request with a definite callback
856     and the ability to cancel the whole request with its subrequests.
857 root 1.55
858     Returns an object of class L<IO::AIO::GRP>. See its documentation below
859     for more info.
860    
861     Example:
862    
863     my $grp = aio_group sub {
864     print "all stats done\n";
865     };
866    
867     add $grp
868     (aio_stat ...),
869     (aio_stat ...),
870     ...;
871    
872 root 1.63 =item aio_nop $callback->()
873    
874     This is a special request - it does nothing in itself and is only used for
875     side effects, such as when you want to add a dummy request to a group so
876     that finishing the requests in the group depends on executing the given
877     code.
878    
879 root 1.64 While this request does nothing, it still goes through the execution
880     phase and still requires a worker thread. Thus, the callback will not
881     be executed immediately but only after other requests in the queue have
882     entered their execution phase. This can be used to measure request
883     latency.
884    
885 root 1.71 =item IO::AIO::aio_busy $fractional_seconds, $callback->() *NOT EXPORTED*
886 root 1.54
887     Mainly used for debugging and benchmarking, this aio request puts one of
888     the request workers to sleep for the given time.
889    
890 root 1.56 While it is theoretically handy to have simple I/O scheduling requests
891 root 1.71 like sleep and file handle readable/writable, the overhead this creates is
892     immense (it blocks a thread for a long time) so do not use this function
893     except to put your application under artificial I/O pressure.
894 root 1.56
895 root 1.5 =back
896    
897 root 1.53 =head2 IO::AIO::REQ CLASS
898 root 1.52
899     All non-aggregate C<aio_*> functions return an object of this class when
900     called in non-void context.
901    
902     =over 4
903    
904 root 1.65 =item cancel $req
905 root 1.52
906     Cancels the request, if possible. Has the effect of skipping execution
907     when entering the B<execute> state and skipping calling the callback when
908     entering the the B<result> state, but will leave the request otherwise
909     untouched. That means that requests that currently execute will not be
910     stopped and resources held by the request will not be freed prematurely.
911    
912 root 1.65 =item cb $req $callback->(...)
913    
914     Replace (or simply set) the callback registered to the request.
915    
916 root 1.52 =back
917    
918 root 1.55 =head2 IO::AIO::GRP CLASS
919    
920     This class is a subclass of L<IO::AIO::REQ>, so all its methods apply to
921     objects of this class, too.
922    
923     A IO::AIO::GRP object is a special request that can contain multiple other
924     aio requests.
925    
926     You create one by calling the C<aio_group> constructing function with a
927     callback that will be called when all contained requests have entered the
928     C<done> state:
929    
930     my $grp = aio_group sub {
931     print "all requests are done\n";
932     };
933    
934     You add requests by calling the C<add> method with one or more
935     C<IO::AIO::REQ> objects:
936    
937     $grp->add (aio_unlink "...");
938    
939 root 1.58 add $grp aio_stat "...", sub {
940     $_[0] or return $grp->result ("error");
941    
942     # add another request dynamically, if first succeeded
943     add $grp aio_open "...", sub {
944     $grp->result ("ok");
945     };
946     };
947 root 1.55
948     This makes it very easy to create composite requests (see the source of
949     C<aio_move> for an application) that work and feel like simple requests.
950    
951 root 1.62 =over 4
952    
953     =item * The IO::AIO::GRP objects will be cleaned up during calls to
954 root 1.55 C<IO::AIO::poll_cb>, just like any other request.
955    
956 root 1.62 =item * They can be canceled like any other request. Canceling will cancel not
957 root 1.59 only the request itself, but also all requests it contains.
958 root 1.55
959 root 1.62 =item * They can also can also be added to other IO::AIO::GRP objects.
960 root 1.55
961 root 1.62 =item * You must not add requests to a group from within the group callback (or
962 root 1.60 any later time).
963    
964 root 1.62 =back
965    
966 root 1.55 Their lifetime, simplified, looks like this: when they are empty, they
967     will finish very quickly. If they contain only requests that are in the
968     C<done> state, they will also finish. Otherwise they will continue to
969     exist.
970    
971 root 1.57 That means after creating a group you have some time to add requests. And
972     in the callbacks of those requests, you can add further requests to the
973     group. And only when all those requests have finished will the the group
974     itself finish.
975    
976 root 1.55 =over 4
977    
978 root 1.65 =item add $grp ...
979    
980 root 1.55 =item $grp->add (...)
981    
982 root 1.57 Add one or more requests to the group. Any type of L<IO::AIO::REQ> can
983     be added, including other groups, as long as you do not create circular
984     dependencies.
985    
986     Returns all its arguments.
987 root 1.55
988 root 1.74 =item $grp->cancel_subs
989    
990     Cancel all subrequests and clears any feeder, but not the group request
991     itself. Useful when you queued a lot of events but got a result early.
992    
993 root 1.58 =item $grp->result (...)
994    
995     Set the result value(s) that will be passed to the group callback when all
996 root 1.80 subrequests have finished and set thre groups errno to the current value
997     of errno (just like calling C<errno> without an error number). By default,
998     no argument will be passed and errno is zero.
999    
1000     =item $grp->errno ([$errno])
1001    
1002     Sets the group errno value to C<$errno>, or the current value of errno
1003     when the argument is missing.
1004    
1005     Every aio request has an associated errno value that is restored when
1006     the callback is invoked. This method lets you change this value from its
1007     default (0).
1008    
1009     Calling C<result> will also set errno, so make sure you either set C<$!>
1010     before the call to C<result>, or call c<errno> after it.
1011 root 1.58
1012 root 1.65 =item feed $grp $callback->($grp)
1013 root 1.60
1014     Sets a feeder/generator on this group: every group can have an attached
1015     generator that generates requests if idle. The idea behind this is that,
1016     although you could just queue as many requests as you want in a group,
1017     this might starve other requests for a potentially long time. For
1018     example, C<aio_scandir> might generate hundreds of thousands C<aio_stat>
1019     requests, delaying any later requests for a long time.
1020    
1021     To avoid this, and allow incremental generation of requests, you can
1022     instead a group and set a feeder on it that generates those requests. The
1023 root 1.68 feed callback will be called whenever there are few enough (see C<limit>,
1024 root 1.60 below) requests active in the group itself and is expected to queue more
1025     requests.
1026    
1027 root 1.68 The feed callback can queue as many requests as it likes (i.e. C<add> does
1028     not impose any limits).
1029 root 1.60
1030 root 1.65 If the feed does not queue more requests when called, it will be
1031 root 1.60 automatically removed from the group.
1032    
1033 root 1.65 If the feed limit is C<0>, it will be set to C<2> automatically.
1034 root 1.60
1035     Example:
1036    
1037     # stat all files in @files, but only ever use four aio requests concurrently:
1038    
1039     my $grp = aio_group sub { print "finished\n" };
1040 root 1.68 limit $grp 4;
1041 root 1.65 feed $grp sub {
1042 root 1.60 my $file = pop @files
1043     or return;
1044    
1045     add $grp aio_stat $file, sub { ... };
1046 root 1.65 };
1047 root 1.60
1048 root 1.68 =item limit $grp $num
1049 root 1.60
1050     Sets the feeder limit for the group: The feeder will be called whenever
1051     the group contains less than this many requests.
1052    
1053     Setting the limit to C<0> will pause the feeding process.
1054    
1055 root 1.55 =back
1056    
1057 root 1.5 =head2 SUPPORT FUNCTIONS
1058    
1059 root 1.86 =head3 EVENT PROCESSING AND EVENT LOOP INTEGRATION
1060    
1061 root 1.5 =over 4
1062    
1063     =item $fileno = IO::AIO::poll_fileno
1064    
1065 root 1.20 Return the I<request result pipe file descriptor>. This filehandle must be
1066     polled for reading by some mechanism outside this module (e.g. Event or
1067     select, see below or the SYNOPSIS). If the pipe becomes readable you have
1068     to call C<poll_cb> to check the results.
1069 root 1.5
1070     See C<poll_cb> for an example.
1071    
1072     =item IO::AIO::poll_cb
1073    
1074 root 1.86 Process some outstanding events on the result pipe. You have to call this
1075 root 1.5 regularly. Returns the number of events processed. Returns immediately
1076 root 1.86 when no events are outstanding. The amount of events processed depends on
1077     the settings of C<IO::AIO::max_poll_req> and C<IO::AIO::max_poll_time>.
1078 root 1.5
1079 root 1.78 If not all requests were processed for whatever reason, the filehandle
1080     will still be ready when C<poll_cb> returns.
1081    
1082 root 1.20 Example: Install an Event watcher that automatically calls
1083     IO::AIO::poll_cb with high priority:
1084 root 1.5
1085     Event->io (fd => IO::AIO::poll_fileno,
1086     poll => 'r', async => 1,
1087     cb => \&IO::AIO::poll_cb);
1088    
1089 root 1.86 =item IO::AIO::max_poll_reqs $nreqs
1090    
1091     =item IO::AIO::max_poll_time $seconds
1092    
1093     These set the maximum number of requests (default C<0>, meaning infinity)
1094     that are being processed by C<IO::AIO::poll_cb> in one call, respectively
1095     the maximum amount of time (default C<0>, meaning infinity) spent in
1096     C<IO::AIO::poll_cb> to process requests (more correctly the mininum amount
1097     of time C<poll_cb> is allowed to use).
1098 root 1.78
1099 root 1.89 Setting C<max_poll_time> to a non-zero value creates an overhead of one
1100     syscall per request processed, which is not normally a problem unless your
1101     callbacks are really really fast or your OS is really really slow (I am
1102     not mentioning Solaris here). Using C<max_poll_reqs> incurs no overhead.
1103    
1104 root 1.86 Setting these is useful if you want to ensure some level of
1105     interactiveness when perl is not fast enough to process all requests in
1106     time.
1107 root 1.78
1108 root 1.86 For interactive programs, values such as C<0.01> to C<0.1> should be fine.
1109 root 1.78
1110     Example: Install an Event watcher that automatically calls
1111 root 1.89 IO::AIO::poll_cb with low priority, to ensure that other parts of the
1112 root 1.78 program get the CPU sometimes even under high AIO load.
1113    
1114 root 1.86 # try not to spend much more than 0.1s in poll_cb
1115     IO::AIO::max_poll_time 0.1;
1116    
1117     # use a low priority so other tasks have priority
1118 root 1.78 Event->io (fd => IO::AIO::poll_fileno,
1119     poll => 'r', nice => 1,
1120 root 1.86 cb => &IO::AIO::poll_cb);
1121 root 1.78
1122 root 1.5 =item IO::AIO::poll_wait
1123    
1124 root 1.93 If there are any outstanding requests and none of them in the result
1125     phase, wait till the result filehandle becomes ready for reading (simply
1126     does a C<select> on the filehandle. This is useful if you want to
1127     synchronously wait for some requests to finish).
1128 root 1.5
1129     See C<nreqs> for an example.
1130    
1131 root 1.86 =item IO::AIO::poll
1132 root 1.5
1133 root 1.86 Waits until some requests have been handled.
1134 root 1.5
1135 root 1.92 Returns the number of requests processed, but is otherwise strictly
1136     equivalent to:
1137 root 1.5
1138     IO::AIO::poll_wait, IO::AIO::poll_cb
1139 root 1.80
1140 root 1.12 =item IO::AIO::flush
1141    
1142     Wait till all outstanding AIO requests have been handled.
1143    
1144 root 1.13 Strictly equivalent to:
1145    
1146     IO::AIO::poll_wait, IO::AIO::poll_cb
1147     while IO::AIO::nreqs;
1148    
1149 root 1.104 =back
1150    
1151 root 1.86 =head3 CONTROLLING THE NUMBER OF THREADS
1152 root 1.13
1153 root 1.105 =over
1154    
1155 root 1.5 =item IO::AIO::min_parallel $nthreads
1156    
1157 root 1.61 Set the minimum number of AIO threads to C<$nthreads>. The current
1158     default is C<8>, which means eight asynchronous operations can execute
1159     concurrently at any one time (the number of outstanding requests,
1160     however, is unlimited).
1161 root 1.5
1162 root 1.34 IO::AIO starts threads only on demand, when an AIO request is queued and
1163 root 1.86 no free thread exists. Please note that queueing up a hundred requests can
1164     create demand for a hundred threads, even if it turns out that everything
1165     is in the cache and could have been processed faster by a single thread.
1166 root 1.34
1167 root 1.61 It is recommended to keep the number of threads relatively low, as some
1168     Linux kernel versions will scale negatively with the number of threads
1169     (higher parallelity => MUCH higher latency). With current Linux 2.6
1170     versions, 4-32 threads should be fine.
1171 root 1.5
1172 root 1.34 Under most circumstances you don't need to call this function, as the
1173     module selects a default that is suitable for low to moderate load.
1174 root 1.5
1175     =item IO::AIO::max_parallel $nthreads
1176    
1177 root 1.34 Sets the maximum number of AIO threads to C<$nthreads>. If more than the
1178     specified number of threads are currently running, this function kills
1179     them. This function blocks until the limit is reached.
1180    
1181     While C<$nthreads> are zero, aio requests get queued but not executed
1182     until the number of threads has been increased again.
1183 root 1.5
1184     This module automatically runs C<max_parallel 0> at program end, to ensure
1185     that all threads are killed and that there are no outstanding requests.
1186    
1187     Under normal circumstances you don't need to call this function.
1188    
1189 root 1.86 =item IO::AIO::max_idle $nthreads
1190    
1191     Limit the number of threads (default: 4) that are allowed to idle (i.e.,
1192     threads that did not get a request to process within 10 seconds). That
1193     means if a thread becomes idle while C<$nthreads> other threads are also
1194     idle, it will free its resources and exit.
1195    
1196     This is useful when you allow a large number of threads (e.g. 100 or 1000)
1197     to allow for extremely high load situations, but want to free resources
1198     under normal circumstances (1000 threads can easily consume 30MB of RAM).
1199    
1200     The default is probably ok in most situations, especially if thread
1201     creation is fast. If thread creation is very slow on your system you might
1202     want to use larger values.
1203    
1204 root 1.79 =item $oldmaxreqs = IO::AIO::max_outstanding $maxreqs
1205 root 1.5
1206 root 1.79 This is a very bad function to use in interactive programs because it
1207     blocks, and a bad way to reduce concurrency because it is inexact: Better
1208     use an C<aio_group> together with a feed callback.
1209    
1210     Sets the maximum number of outstanding requests to C<$nreqs>. If you
1211     to queue up more than this number of requests, the next call to the
1212     C<poll_cb> (and C<poll_some> and other functions calling C<poll_cb>)
1213     function will block until the limit is no longer exceeded.
1214    
1215     The default value is very large, so there is no practical limit on the
1216     number of outstanding requests.
1217    
1218     You can still queue as many requests as you want. Therefore,
1219     C<max_oustsanding> is mainly useful in simple scripts (with low values) or
1220     as a stop gap to shield against fatal memory overflow (with large values).
1221 root 1.5
1222 root 1.104 =back
1223    
1224 root 1.86 =head3 STATISTICAL INFORMATION
1225    
1226 root 1.104 =over
1227    
1228 root 1.86 =item IO::AIO::nreqs
1229    
1230     Returns the number of requests currently in the ready, execute or pending
1231     states (i.e. for which their callback has not been invoked yet).
1232    
1233     Example: wait till there are no outstanding requests anymore:
1234    
1235     IO::AIO::poll_wait, IO::AIO::poll_cb
1236     while IO::AIO::nreqs;
1237    
1238     =item IO::AIO::nready
1239    
1240     Returns the number of requests currently in the ready state (not yet
1241     executed).
1242    
1243     =item IO::AIO::npending
1244    
1245     Returns the number of requests currently in the pending state (executed,
1246     but not yet processed by poll_cb).
1247    
1248 root 1.5 =back
1249    
1250 root 1.1 =cut
1251    
1252 root 1.2 # support function to convert a fd into a perl filehandle
1253     sub _fd2fh {
1254     return undef if $_[0] < 0;
1255    
1256 root 1.23 # try to generate nice filehandles
1257     my $sym = "IO::AIO::fd#$_[0]";
1258     local *$sym;
1259 root 1.25
1260 root 1.27 open *$sym, "+<&=$_[0]" # usually works under any unix
1261     or open *$sym, "<&=$_[0]" # cygwin needs this
1262     or open *$sym, ">&=$_[0]" # or this
1263 root 1.2 or return undef;
1264    
1265 root 1.23 *$sym
1266 root 1.2 }
1267    
1268 root 1.61 min_parallel 8;
1269 root 1.1
1270 root 1.95 END { flush }
1271 root 1.82
1272 root 1.1 1;
1273    
1274 root 1.27 =head2 FORK BEHAVIOUR
1275    
1276 root 1.52 This module should do "the right thing" when the process using it forks:
1277    
1278 root 1.34 Before the fork, IO::AIO enters a quiescent state where no requests
1279     can be added in other threads and no results will be processed. After
1280     the fork the parent simply leaves the quiescent state and continues
1281 root 1.72 request/result processing, while the child frees the request/result queue
1282     (so that the requests started before the fork will only be handled in the
1283     parent). Threads will be started on demand until the limit set in the
1284 root 1.34 parent process has been reached again.
1285 root 1.27
1286 root 1.52 In short: the parent will, after a short pause, continue as if fork had
1287     not been called, while the child will act as if IO::AIO has not been used
1288     yet.
1289    
1290 root 1.60 =head2 MEMORY USAGE
1291    
1292 root 1.72 Per-request usage:
1293    
1294     Each aio request uses - depending on your architecture - around 100-200
1295     bytes of memory. In addition, stat requests need a stat buffer (possibly
1296     a few hundred bytes), readdir requires a result buffer and so on. Perl
1297     scalars and other data passed into aio requests will also be locked and
1298     will consume memory till the request has entered the done state.
1299 root 1.60
1300 root 1.111 This is not awfully much, so queuing lots of requests is not usually a
1301 root 1.60 problem.
1302    
1303 root 1.72 Per-thread usage:
1304    
1305     In the execution phase, some aio requests require more memory for
1306     temporary buffers, and each thread requires a stack and other data
1307     structures (usually around 16k-128k, depending on the OS).
1308    
1309     =head1 KNOWN BUGS
1310    
1311 root 1.73 Known bugs will be fixed in the next release.
1312 root 1.60
1313 root 1.1 =head1 SEE ALSO
1314    
1315 root 1.68 L<Coro::AIO>.
1316 root 1.1
1317     =head1 AUTHOR
1318    
1319     Marc Lehmann <schmorp@schmorp.de>
1320     http://home.schmorp.de/
1321    
1322     =cut
1323