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

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

问题描述:

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

+1

可能会感兴趣:http://marcgravell.blogspot.com/2009/02/async-without-pain.html – 2009-02-12 04:42:01

如果您已经使用了异步方法,则不必执行任何操作。根据您用于调用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机器):

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

+0

一个共享池在IO域关闭时正在工作,这正是我所希望的。感谢您的解释。 – 2009-02-12 14:58:42