High-performance Windows Sockets Applications ;-)

Thomas Harning harningt at gmail.com
Wed Jun 4 17:37:50 CEST 2008

On Jun 4, 2008, at 4:07 AM, Marc Lehmann wrote:

> - use threads to overlap (blocking) network I/O
>  with computations
> Now, except for the very last suggestion, that's hardly any news to  
> anybody.
> And if the last suggestion is meant seriously, then, well, forget  
> about
> libev, on windows, you do not use non-blocking I/O at all, you don't  
> use
> events, you use THREADS.
> and that might well be true... to get perfromance out of windows, use
> threads. preferably thread pools.
I think they mean that you want to use separate threads for  
computation and data communication....
With the data communication threads, IIRR, being the same # as CPUs  
(or something like that)...

I think I recall finding that IOCP either uses a thread-pool or  
interrupts currently executing code for its callbacks... so you'd have  
IOCP perform data management and on completion do the minimum amt of  
work (queue up the data to be processed).

This doesn't quite fit into libev's workflow directly (booo!), though  
one 'could' create some interesting layers...

Ex: something like libeio's interface could take advantage of some  
items transparently, or a layer for libev that handles data transport  
and alerts you to readiness for data available in filled buffers or  
buffers have room to put data (kinda like the bufferevent  

More information about the libev mailing list