.NET如何使用IO线程或IO完成端口?

时间:2009-02-12 03:48:32

标签: .net performance concurrency

我们有一个.NET应用程序,它可以对各种Web服务进行多次并发调用,收集它们的响应,然后根据这些响应进行一些计算。在尝试获得额外性能时,我一直在研究使用通过使用IO完成端口来使用.NET的IO线程的方法。我已经阅读了几个资源,包括Joe Duffy最近出版的“Windows上的并发编程”一书,虽然我“得到”了它们的用处,但我对它们在.NET中的行为有点不清楚,我正在寻找一个简明的解释。

1 个答案:

答案 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):

https://web.archive.org/web/20101101112358/http://doc.sch130.nsc.ru/www.sysinternals.com/ntw2k/info/comport.shtml