ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/README
Revision: 1.19
Committed: Sun Oct 29 01:03:13 2006 UTC (17 years, 6 months ago) by root
Branch: MAIN
CVS Tags: rel-2_1
Changes since 1.18: +179 -62 lines
Log Message:
*** empty log message ***

File Contents

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