new i/o library

Bulat Ziganshin bulatz at
Fri Jan 27 05:10:18 EST 2006

Hello Simon

i'm now write some sort of new i/o library. one area where i currently
lacks in comparision to the existing Handles implementation in GHC, is
the asynchronous i/o operations. can you please briefly describe how
this is done in GHC and partially - why the multiple buffers are used?

i'm now use just one buffer, which can contain read or write data, but
not both - this buffer is just flushed before switching "mode" of
operations. am i lose something due to this simplified algorithm?

moreover, i have an idea how to implement async i/o without complex
burecreacy: use mmapped files, may be together with miltiple buffers.
for example, we can allocate four 16kb buffers. when one buffer is
filled with written data, the program unmaps it and switches to use
the next buffer. i don't tested it, but OS can guess that unmapped
buffer now should be asynchronously written to disk. the same for
reading - when we completely read one buffer, we can unmap it, switch
to the second buffer and map the third so that the OS can
asynchronously fill the third buffer while we are reading second.
should this work, at least on the main desktop OSes?

at least, mmap/VirtualAlloc available afaik on the all ghc-supported
platforms, so this should work anywhere. of course, this scheme omits
async i/o on sockets in Windows


Best regards,
 Bulat                          mailto:bulatz at

More information about the Glasgow-haskell-users mailing list