title="Real asynchronous I/O (350h)"
[Taylor R Campbell](mailto:riastradh@NetBSD.org)
The current asynchronous I/O (aio) implementation works by forking a
background thread inside the kernel to do the I/O synchronously.
This is a starting point, but one thread limits the amount of potential
parallelism, and adding more threads falls down badly when applications
want to have large numbers of requests outstanding at once.
Furthermore, the existing code doesn't even work in some cases; this
is not well documented but there have been scattered reports of
problems that nobody had time to look into in detail.
In order to make asynchronous I/O work well, the I/O path needs to be
revised, particularly in the kernel's file system interface, so that
all I/O operations are asynchronous requests by default.
It is easy for high-level code to wait synchronously for lower-level
asynchronous requests to complete; it is much more problematic for an
asynchronous request to call into code that expects to be synchronous.
The [[flow control|tcp-writing]] project, which also requires
substantial revisions to the I/O path, naturally combines with this
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb