在完成端口需要用到缓冲池,里面有两个队列。一个是完成队列——存放在完成端口需响应的消息,可以通过调用CallPostQueuedCompletion()将自定义的消息放入该队列,或者在一般的响应网络事件也可将消息加入该队列;此队列为FIFO。另一个是等待队列——存放等待完成的消息,(这里的消息放到网络编程中的变成了数据包),可以通过调用GetQueuedCompletionStatus()来检测完成队列中是否存在待处理消息,有则从完成队列取下挂在等待队列进行等待,无则阻塞(默认设置);此队列为LIFO;在等待中,系统若发现有空闲工作线程(此工作线程已经与PER_HANDLE_DATA绑定,工作线程最大数不能超过CreateIoCompletionPort()中的最大线程数),就将该数据报从等待队列取下,交由空闲线程处理。