2010-07-29 81 views
3

我目前正在研究高性能原始套接字应用程序。Socket ReceiveFromAsync暗指多线程?

我正在使用ReceiveFromAsync接收数据包。这可能听起来像一个愚蠢的问题,但这是隐含的线程?我不确定是否需要将接收到的数据包和线程关闭,以确保在处理当前数据包时不会阻止任何其他数据包。文档没有提到这一点。 3.5套接字的示例代码不会线程化,所以我最初的猜测是它的隐式处理。

由于

回答

3

所有的Async IO功能创建/利用一个IO完成端口,这是提交的处理请求的队列。每当进程产生一个Asynch IO call这个请求在这个队列上被提交。一个特殊的线程池然后处理这些IO请求,这些是kernel threads。因此,如果您将此系统管道(these kernel threads)视为多线程的一部分,那么您的代码是多线程的。

如果考虑通过Async IO电话作为起点为您提供的抽象,那么很可能你的代码是不是多线程。

在这两种情况下,有多个线程在运行,即使他们不是在你的应用程序专用线程或应用程序启动之前,它们被创建,并会继续你的应用程序中存在后运行。