[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