我们有一个.NET应用程序,它可以对各种Web服务进行多次并发调用,收集它们的响应,然后根据这些响应进行一些计算。在尝试获得额外性能时,我一直在研究使用通过使用IO完成端口来使用.NET的IO线程的方法。我已经阅读了几个资源,包括Joe Duffy最近出版的“Windows上的并发编程”一书,虽然我“得到”了它们的用处,但我对它们在.NET中的行为有点不清楚,我正在寻找一个简明的解释。
答案 0 :(得分:26)
如果您已经使用异步方法,则可能无需执行任何操作。根据您用于调用Web服务的技术,最终,它将下拉到Win32 API以进行从网络获取字节的调用,为此,它将使用I / O完成端口以处理异步调用。
I / O完成端口背后的基本前提是,在等待I / O操作时,有一个线程池在I / O操作完成时一直等待(假设您已注册使用I / O完成端口) )。当您的注册操作完成时,来自I / O完成端口线程池的线程将用于处理回调。
当然,在调用I / O完成端口之后,您的线程可以继续进行更多的工作或终止,您的选择取决于您。
以下内容应该有助于更多地描述:
I / O完成端口:
http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx
内部I / O完成端口(WayBack Machine):