From HaskellWiki
Jump to: navigation, search

GHC's I/O manager currently uses select() for I/O multiplexing. The select() call requires an O(n) walk through the file descriptor list to determine whether the descriptors are ready for reading or writing. We've been wanting to replace this with epoll() (or the equivalent) for years now.

Our work in process can be downloaded here:

Todo list

  • remove any non-base dependencies so that the code can be acceptable for inclusion into GHC
  • work out a compatible design that will work for Windows IO completion ports -- many changes to the other I/O functions may be required here!
  • determine which other API changes will be necessary in GHC proper
  • testing for all platforms
  • use the pipe() trick GHC currently uses to support waking up the I/O manager from other threads
  • finish poll() / select() / kqueue() / epoll() backends

Low priority:

  • set up a darcs repo instead of the git one