… | |
… | |
171 | use common::sense; |
171 | use common::sense; |
172 | |
172 | |
173 | use base 'Exporter'; |
173 | use base 'Exporter'; |
174 | |
174 | |
175 | BEGIN { |
175 | BEGIN { |
176 | our $VERSION = 4.75; |
176 | our $VERSION = 4.76; |
177 | |
177 | |
178 | our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close |
178 | our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close |
179 | aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx |
179 | aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx |
180 | aio_scandir aio_symlink aio_readlink aio_realpath aio_fcntl aio_ioctl |
180 | aio_scandir aio_symlink aio_readlink aio_realpath aio_fcntl aio_ioctl |
181 | aio_sync aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range |
181 | aio_sync aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range |
… | |
… | |
2061 | longer exceeded. |
2061 | longer exceeded. |
2062 | |
2062 | |
2063 | In other words, this setting does not enforce a queue limit, but can be |
2063 | In other words, this setting does not enforce a queue limit, but can be |
2064 | used to make poll functions block if the limit is exceeded. |
2064 | used to make poll functions block if the limit is exceeded. |
2065 | |
2065 | |
2066 | This is a very bad function to use in interactive programs because it |
2066 | This is a bad function to use in interactive programs because it blocks, |
2067 | blocks, and a bad way to reduce concurrency because it is inexact: Better |
2067 | and a bad way to reduce concurrency because it is inexact. If you need to |
|
|
2068 | issue many requests without being able to call a poll function on demand, |
2068 | use an C<aio_group> together with a feed callback. |
2069 | it is better to use an C<aio_group> together with a feed callback. |
2069 | |
2070 | |
2070 | Its main use is in scripts without an event loop - when you want to stat |
2071 | Its main use is in scripts without an event loop - when you want to stat a |
2071 | a lot of files, you can write something like this: |
2072 | lot of files, you can write something like this: |
2072 | |
2073 | |
2073 | IO::AIO::max_outstanding 32; |
2074 | IO::AIO::max_outstanding 32; |
2074 | |
2075 | |
2075 | for my $path (...) { |
2076 | for my $path (...) { |
2076 | aio_stat $path , ...; |
2077 | aio_stat $path , ...; |
2077 | IO::AIO::poll_cb; |
2078 | IO::AIO::poll_cb; |
2078 | } |
2079 | } |
2079 | |
2080 | |
2080 | IO::AIO::flush; |
2081 | IO::AIO::flush; |
2081 | |
2082 | |
2082 | The call to C<poll_cb> inside the loop will normally return instantly, but |
2083 | The call to C<poll_cb> inside the loop will normally return instantly, |
2083 | as soon as more thna C<32> reqeusts are in-flight, it will block until |
2084 | allowing the loop to progress, but as soon as more than C<32> requests |
2084 | some requests have been handled. This keeps the loop from pushing a large |
2085 | are in-flight, it will block until some requests have been handled. This |
2085 | number of C<aio_stat> requests onto the queue. |
2086 | keeps the loop from pushing a large number of C<aio_stat> requests onto |
|
|
2087 | the queue (which, with many paths to stat, can use up a lot of memory). |
2086 | |
2088 | |
2087 | The default value for C<max_outstanding> is very large, so there is no |
2089 | The default value for C<max_outstanding> is very large, so there is no |
2088 | practical limit on the number of outstanding requests. |
2090 | practical limit on the number of outstanding requests. |
2089 | |
2091 | |
2090 | =back |
2092 | =back |
… | |
… | |
2329 | C<IO::AIO::MAP_POPULATE>, |
2331 | C<IO::AIO::MAP_POPULATE>, |
2330 | C<IO::AIO::MAP_NONBLOCK>, |
2332 | C<IO::AIO::MAP_NONBLOCK>, |
2331 | C<IO::AIO::MAP_FIXED>, |
2333 | C<IO::AIO::MAP_FIXED>, |
2332 | C<IO::AIO::MAP_GROWSDOWN>, |
2334 | C<IO::AIO::MAP_GROWSDOWN>, |
2333 | C<IO::AIO::MAP_32BIT>, |
2335 | C<IO::AIO::MAP_32BIT>, |
2334 | C<IO::AIO::MAP_HUGETLB> or |
2336 | C<IO::AIO::MAP_HUGETLB>, |
2335 | C<IO::AIO::MAP_STACK>. |
2337 | C<IO::AIO::MAP_STACK>, |
|
|
2338 | C<IO::AIO::MAP_FIXED_NOREPLACE>, |
|
|
2339 | C<IO::AIO::MAP_SHARED_VALIDATE>, |
|
|
2340 | C<IO::AIO::MAP_SYNC> or |
|
|
2341 | C<IO::AIO::MAP_UNINITIALIZED>. |
2336 | |
2342 | |
2337 | If C<$fh> is C<undef>, then a file descriptor of C<-1> is passed. |
2343 | If C<$fh> is C<undef>, then a file descriptor of C<-1> is passed. |
2338 | |
2344 | |
2339 | C<$offset> is the offset from the start of the file - it generally must be |
2345 | C<$offset> is the offset from the start of the file - it generally must be |
2340 | a multiple of C<IO::AIO::PAGESIZE> and defaults to C<0>. |
2346 | a multiple of C<IO::AIO::PAGESIZE> and defaults to C<0>. |