[RFC]: Overlapped I/O implementation
Alexandre Julliard
julliard at winehq.com
Mon Nov 12 15:28:18 CST 2001
Martin Wilck <Martin.Wilck at fujitsu-siemens.com> writes:
> B) The check_async() function in synchro.c operates on file descriptors
> rather than async requests. Once an overlapped I/O request is
> issued by the application, it is queued either in the readers or
> writers list of the async object (which is obtained from the server).
> If both the readers and writers lists were NULL beforehand, the fd
> is inserted into the list for check_async to work on.
But the list has to be stored in the server, otherwise you cannot
guarantee the request order across processes. I think you need to put
just about everything except the actual read/write call in the
server.
> check_async() activates the first element(s) of both the readers and
> writers lists (where activate means that the actual read/write call
> is triggered). For FIFOS, only one element would be activated; for
> regular files several requests up to a given limit (e.g. 4).
>
> If the file is on a device where normal I/O would be blocking, a
> new thread is created for each activated request to satisfy it.
I don't think we want to use threads at all. This has major overhead
and compatibility problems. IMO normal file I/O should always be done
synchronously; it may impact performance a bit when reading from
floppy, but this is better than slowing down all async operations with
the need to manage threads and locks.
--
Alexandre Julliard
julliard at winehq.com
More information about the wine-devel
mailing list