"When a process creates an I/O completion port, the system creates an associated queue object for requests whose sole purpose is to service these requests. Processes that handle many concurrent asynchronous I/O requests can do so more quickly and efficiently by using I/O completion ports in conjunction with a pre-allocated thread pool than by creating threads at the time they receive an I/O request."
I don't understand where this pre-allocated thread pool comes into the picture. Is it something that I should manage through my own code (function calls) ? ...
Or is it something created by the "background system" for managing my application? (E.g. the system creates its own thread pool to handle the overlapping I/O requests on sockets/files that my application sends)