I did research this weekend on high performance I/O. I looked at differerent approaches and to me they all appear the same (I know that I will get some flamage for this). The two most prominent models that I saw were IO Completion Ports and Synchronous Events (such as the Gaurav http://www.cs.rice.edu/~gaurav/papers/usenix99.ps).
I think that both of these models are basically the same. They both have an event queue that you pick up events from. The only way that they differ is in what they call an event. Completion ports take asynchronous opperations and queue an event when the opperation completes (hence the name). Synchronous events do the opposite: they queue an event when an opperation is possible and then the synchronous (usually, non-blocking) opperation is performed. From this, you can decouple and event queue from what you call an event.