… | |
… | |
63 | use base 'Exporter'; |
63 | use base 'Exporter'; |
64 | |
64 | |
65 | use Fcntl (); |
65 | use Fcntl (); |
66 | |
66 | |
67 | BEGIN { |
67 | BEGIN { |
68 | $VERSION = 1.2; |
68 | $VERSION = 1.3; |
|
|
69 | |
69 | |
70 | |
70 | @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink |
71 | @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink |
71 | aio_rmdir aio_symlink aio_fsync aio_fdatasync aio_readahead); |
72 | aio_rmdir aio_symlink aio_fsync aio_fdatasync aio_readahead); |
72 | @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel max_outstanding nreqs); |
73 | @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel max_outstanding nreqs); |
73 | |
74 | |
… | |
… | |
150 | Reads or writes C<length> bytes from the specified C<fh> and C<offset> |
151 | Reads or writes C<length> bytes from the specified C<fh> and C<offset> |
151 | into the scalar given by C<data> and offset C<dataoffset> and calls the |
152 | into the scalar given by C<data> and offset C<dataoffset> and calls the |
152 | callback without the actual number of bytes read (or -1 on error, just |
153 | callback without the actual number of bytes read (or -1 on error, just |
153 | like the syscall). |
154 | like the syscall). |
154 | |
155 | |
|
|
156 | The C<$data> scalar I<MUST NOT> be modified in any way while the request |
|
|
157 | is outstanding. Modifying it can result in segfaults or WW3 (if the |
|
|
158 | necessary/optional hardware is installed). |
|
|
159 | |
155 | Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at |
160 | Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at |
156 | offset C<0> within the scalar: |
161 | offset C<0> within the scalar: |
157 | |
162 | |
158 | aio_read $fh, 7, 15, $buffer, 0, sub { |
163 | aio_read $fh, 7, 15, $buffer, 0, sub { |
159 | $_[0] > 0 or die "read error: $!"; |
164 | $_[0] > 0 or die "read error: $!"; |
… | |
… | |
349 | |
354 | |
350 | 1; |
355 | 1; |
351 | |
356 | |
352 | =head2 FORK BEHAVIOUR |
357 | =head2 FORK BEHAVIOUR |
353 | |
358 | |
354 | Before the fork IO::AIO first handles all outstanding requests - if other |
359 | Before the fork IO::AIO enters a quiescent state where no requests can be |
355 | threads add requests during this period, this time is prolonged. It then |
360 | added in other threads and no results will be processed. After the fork |
356 | enters a quiescent state where no requests can be added in other threads |
361 | the parent simply leaves the quiescent state and continues request/result |
357 | and no results will be processed. After the fork the parent simply leaves |
362 | processing, while the child clears the request/result queue and starts the |
358 | the quiescent state and continues request processing, while the child |
|
|
359 | starts the same number of threads as were in use by the parent. |
363 | same number of threads as were in use by the parent. |
360 | |
364 | |
361 | =head1 SEE ALSO |
365 | =head1 SEE ALSO |
362 | |
366 | |
363 | L<Coro>, L<Linux::AIO>. |
367 | L<Coro>, L<Linux::AIO>. |
364 | |
368 | |