--- IO-AIO/README 2010/12/30 07:19:31 1.45 +++ IO-AIO/README 2011/05/27 00:44:49 1.47 @@ -206,6 +206,7 @@ IO::AIO::min_parallel $nthreads IO::AIO::max_parallel $nthreads IO::AIO::max_idle $nthreads + IO::AIO::idle_timeout $seconds IO::AIO::max_outstanding $maxreqs IO::AIO::nreqs IO::AIO::nready @@ -307,6 +308,15 @@ } }; + In addition to all the common open modes/flags ("O_RDONLY", + "O_WRONLY", "O_RDWR", "O_CREAT", "O_TRUNC", "O_EXCL" and + "O_APPEND"), the following POSIX and non-POSIX constants are + available (missing ones on your system are, as usual, 0): + + "O_ASYNC", "O_DIRECT", "O_NOATIME", "O_CLOEXEC", "O_NOCTTY", + "O_NOFOLLOW", "O_NONBLOCK", "O_EXEC", "O_SEARCH", "O_DIRECTORY", + "O_DSYNC", "O_RSYNC", "O_SYNC" and "O_TTY_INIT". + aio_close $fh, $callback->($status) Asynchronously close a file and call the callback with the result code. @@ -416,6 +426,15 @@ silently truncated unless perl itself is compiled with large file support. + To help interpret the mode and dev/rdev stat values, IO::AIO offers + the following constants and functions (if not implemented, the + constants will be 0 and the functions will either "croak" or fall + back on traditional behaviour). + + "S_IFMT", "S_IFIFO", "S_IFCHR", "S_IFBLK", "S_IFLNK", "S_IFREG", + "S_IFDIR", "S_IFWHT", "S_IFSOCK", "IO::AIO::major $dev_t", + "IO::AIO::minor $dev_t", "IO::AIO::makedev $major, $minor". + Example: Print the length of /etc/passwd: aio_stat "/etc/passwd", sub { @@ -513,6 +532,9 @@ aio_mknod $path, IO::AIO::S_IFIFO | $mode, 0, sub { ... + See "aio_stat" for info about some potentially helpful extra + constants and functions. + aio_link $srcpath, $dstpath, $callback->($status) Asynchronously create a new link to the existing object at $srcpath at the path $dstpath and call the callback with the result code. @@ -558,9 +580,9 @@ modified): IO::AIO::READDIR_DENTS - When this flag is off, then the callback gets an arrayref with - of names only (as with "aio_readdir"), otherwise it gets an - arrayref with "[$name, $type, $inode]" arrayrefs, each + When this flag is off, then the callback gets an arrayref + consisting of names only (as with "aio_readdir"), otherwise it + gets an arrayref with "[$name, $type, $inode]" arrayrefs, each describing a single directory entry in more detail. $name is the name of the entry. @@ -583,14 +605,15 @@ IO::AIO::READDIR_DIRS_FIRST When this flag is set, then the names will be returned in an - order where likely directories come first. This is useful when - you need to quickly find directories, or you want to find all - directories while avoiding to stat() each entry. + order where likely directories come first, in optimal stat + order. This is useful when you need to quickly find directories, + or you want to find all directories while avoiding to stat() + each entry. If the system returns type information in readdir, then this is used to find directories directly. Otherwise, likely directories - are files beginning with ".", or otherwise files with no dots, - of which files with short names are tried first. + are names beginning with ".", or otherwise names with no dots, + of which names with short names are tried first. IO::AIO::READDIR_STAT_ORDER When this flag is set, then the names will be returned in an @@ -1011,16 +1034,23 @@ IO::AIO::poll_cb Process some outstanding events on the result pipe. You have to call - this regularly. Returns 0 if all events could be processed, or -1 if - it returned earlier for whatever reason. Returns immediately when no - events are outstanding. The amount of events processed depends on - the settings of "IO::AIO::max_poll_req" and - "IO::AIO::max_poll_time". + this regularly. Returns 0 if all events could be processed (or there + were no events to process), or -1 if it returned earlier for + whatever reason. Returns immediately when no events are outstanding. + The amount of events processed depends on the settings of + "IO::AIO::max_poll_req" and "IO::AIO::max_poll_time". If not all requests were processed for whatever reason, the filehandle will still be ready when "poll_cb" returns, so normally you don't have to do anything special to have it called later. + Apart from calling "IO::AIO::poll_cb" when the event filehandle + becomes ready, it can be beneficial to call this function from loops + which submit a lot of requests, to make sure the results get + processed when they become available and not just when the loop is + finished and the event loop takes over again. This function returns + very fast when there are no outstanding requests. + Example: Install an Event watcher that automatically calls IO::AIO::poll_cb with high priority (more examples can be found in the SYNOPSIS section, at the top of this document): @@ -1123,9 +1153,10 @@ IO::AIO::max_idle $nthreads Limit the number of threads (default: 4) that are allowed to idle - (i.e., threads that did not get a request to process within 10 - seconds). That means if a thread becomes idle while $nthreads other - threads are also idle, it will free its resources and exit. + (i.e., threads that did not get a request to process within the idle + timeout (default: 10 seconds). That means if a thread becomes idle + while $nthreads other threads are also idle, it will free its + resources and exit. This is useful when you allow a large number of threads (e.g. 100 or 1000) to allow for extremely high load situations, but want to free @@ -1136,6 +1167,10 @@ creation is fast. If thread creation is very slow on your system you might want to use larger values. + IO::AIO::idle_timeout $seconds + Sets the minimum idle timeout (default 10) after which worker + threads are allowed to exit. SEe "IO::AIO::max_idle". + IO::AIO::max_outstanding $maxreqs This is a very bad function to use in interactive programs because it blocks, and a bad way to reduce concurrency because it is