With IOCP you have some worker-threads, normally I go for 2 - 4 four for each CPU in the machine. If everything is running fast and not waiting for anything, your completion port only uses a single thread for each CPU, but if one of those threads is "suspended" waiting for disk I/O, a database or something else, and a new socket connection is opened, the completion port uses a new thread to handle that connection. Basically IO Completion Ports is a mix between a threadpool and async. I/O ;) - Anders Money talks, but all mine ever says is "Goodbye!"