--- cvsroot/IO-AIO/README 2005/08/17 05:26:20 1.10 +++ cvsroot/IO-AIO/README 2005/08/20 00:32:42 1.11 @@ -241,23 +241,30 @@ if IO::AIO::nreqs; IO::AIO::min_parallel $nthreads - Set the minimum number of AIO threads to $nthreads. The default is - 1, which means a single asynchronous operation can be done at one - time (the number of outstanding operations, however, is unlimited). + Set the minimum number of AIO threads to $nthreads. The current + default is 4, which means four asynchronous operations can be done + at one time (the number of outstanding operations, however, is + unlimited). + + IO::AIO starts threads only on demand, when an AIO request is queued + and no free thread exists. 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). With current Linux 2.6 versions, 4-32 threads should be fine. - Under normal circumstances you don't need to call this function, as - this module automatically starts some threads (the exact number - might change, and is currently 4). + Under most circumstances you don't need to call this function, as + the module selects a default that is suitable for low to moderate + load. IO::AIO::max_parallel $nthreads Sets the maximum number of AIO threads to $nthreads. If more than - the specified number of threads are currently running, kill them. - This function blocks until the limit is reached. + the specified number of threads are currently running, this function + kills them. This function blocks until the limit is reached. + + While $nthreads are zero, aio requests get queued but not executed + until the number of threads has been increased again. This module automatically runs "max_parallel 0" at program end, to ensure that all threads are killed and that there are no outstanding @@ -271,18 +278,19 @@ block until some requests have been handled. The default is very large, so normally there is no practical limit. - If you queue up many requests in a loop it it often improves speed - if you set this to a relatively low number, such as 100. + If you queue up many requests in a loop it often improves speed if + you set this to a relatively low number, such as 100. Under normal circumstances you don't need to call this function. FORK BEHAVIOUR - Before the fork IO::AIO enters a quiescent state where no requests can + Before the fork, IO::AIO enters a quiescent state where no requests can be added in other threads and no results will be processed. After the fork the parent simply leaves the quiescent state and continues request/result processing, while the child clears the request/result - queue and starts the same number of threads as were in use by the - parent. + queue (so the requests started before the fork will only be handled in + the parent). Threats will be started on demand until the limit ste in + the parent process has been reached again. SEE ALSO Coro, Linux::AIO.