2011-04-01 47 views
1

http://msdn.microsoft.com/en-us/library/bbx2eya8.aspx看起来,这种类型的套接字使用多个线程,但从我认为异步套接字可以并应该在单线程(或最少数量的线程)中运行,因为它们只是来自状态机就像智能调度程序一样工作。.NET中的异步套接字是无线的吗?

我的问题是:异步套接字是否会产生与连接数一样多的线程,或者是否存在生成线程数的上限,无论应用程序处理多少个连接。

回答

2

是的,没有。所有的实际工作都是由TCP/IP驱动程序堆栈完成的。处理多个不完整的IRP请求没有问题。当其中一个完成时,一个APC在一个线程池线程上被触发,这个线程结束后会调用你的完成回调。底层操作系统对象称为“I/O完成端口”,您可以在此SDK article中阅读更多关于它的信息。

1

它说在你提供的异步套接字使用线程池的链接中,所以根据定义它们被限制在一定数量的线程中。