--- Linux-AIO/AIO.pm 2004/05/06 15:05:57 1.16 +++ Linux-AIO/AIO.pm 2005/07/09 22:45:05 1.29 @@ -8,18 +8,23 @@ =head1 DESCRIPTION -This module implements asynchronous i/o using the means available to linux -- clone. It does not hook into the POSIX aio_* functions because linux -does not yet support these in the kernel (and even if, it would only allow -aio_read and write, not open and stat). +This module implements asynchronous I/O using the means available to Linux +- clone. It does not hook into the POSIX aio_* functions because Linux +does not yet support these in the kernel (even as of 2.6.12, only O_DIRECT +files are supported) and even if, it would only allow aio_read and write, +not open, stat and so on. Instead, in this module a number of (non-posix) threads are started that execute your read/writes and signal their completion. You don't need thread support in your libc or perl, and the threads created by this module will not be visible to the pthreads library. -Although the module will work with threads, it is not reentrant, so use -appropriate locking yourself. +NOTICE: the threads created by this module will automatically be killed +when the thread calling min_parallel exits. Make sure you only ever call +min_parallel from the same thread that loaded this module. + +Although the module will work with in the presence of other threads, it is +not reentrant, so use appropriate locking yourself. =over 4 @@ -30,9 +35,10 @@ use base 'Exporter'; BEGIN { - $VERSION = 1.1; + $VERSION = 1.7; - @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat); + @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink + aio_fsync aio_fdatasync aio_readahead); @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel nreqs); require XSLoader; @@ -45,10 +51,19 @@ C<1>, which means a single asynchronous operation can be done at one time (the number of outstanding operations, however, is unlimited). -It is recommended to keep the number of threads low, as many linux +It is recommended to keep the number of threads low, as some linux kernel versions will scale negatively with the number of threads (higher parallelity => MUCH higher latency). +=item Linux::AIO::max_parallel $nthreads + +Sets the maximum number of AIO threads to C<$nthreads>. If more than +the specified number of threads are currently running, kill them. This +function blocks until the limit is reached. + +This module automatically runs C at program end, to ensure +that all threads are killed and that there are no outstanding requests. + =item $fileno = Linux::AIO::poll_fileno Return the I. This filehandle must be @@ -68,6 +83,11 @@ poll => 'r', async => 1, cb => \&Linux::AIO::poll_cb ); +=item Linux::AIO::poll_wait + +Wait till the result filehandle becomes ready for reading (simply does a +select on the filehandle. This is useful if you want to synchronously wait +for some requests to finish). =item Linux::AIO::nreqs @@ -103,6 +123,10 @@ error when stat'ing a large file, the results will be silently truncated unless perl itself is compiled with large file support. +=item aio_unlink $pathname, $callback + +Asynchronously unlink a file. + =cut min_parallel 1; @@ -128,8 +152,8 @@ =head1 AUTHOR - Marc Lehmann - http://www.goof.com/pcg/marc/ + Marc Lehmann + http://home.schmorp.de/ =cut