.net - .NET如何利用IO线程或IO完成端口?

标签 .net performance concurrency

我们有一个.NET应用程序,它可以同时调用各种Web服务,收集它们的响应,然后根据这些响应进行一些计算。为了尝试获得更高的性能,我一直在研究通过使用IO完成端口使用.NET IO线程的方法。我已经阅读了几篇资源,包括Joe Duffy的最新著作《 Windows上的并发编程》,虽然我“了解”了它们的用处,但对于它们在.NET中的行为尚不清楚,并且正在寻找一个简洁的解释。

最佳答案

如果您已经在使用异步方法,则可能无需执行任何操作。最终,取决于调用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

关于.net - .NET如何利用IO线程或IO完成端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/539940/

相关文章:

c# - 使用 C#/Windows 窗体的简单动画

performance - awk 超慢处理多行但不多列

c++ - 标准 C++11 是否保证 memory_order_seq_cst 防止 StoreLoad 围绕原子进行非原子重新排序?

Java Thread.sleep() 实现

c# - 计算代码库中的匿名类?

c# - 使用任务获取目录图标

c# - 使用列名称的字符串列表查询 SQL 表

android - Phonegap VS 类固醇。我选对了吗?

C++ CPU 未充分利用

java - 用于围绕错误进程包装超时的标准 Java 模式