套接字ReceiveFromAsync是否隐含多线程?

时间:2010-07-29 17:53:41

标签: .net multithreading sockets packets

我目前正在开发一个高性能的Raw套接字应用程序。

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

由于

1 个答案:

答案 0 :(得分:3)

所有Async IO函数都创建/使用IO完成端口,这是一个进程提交的请求队列。每当进程发出Asynch IO call时,此请求就会在此队列中提交。然后,一个特殊的线程池处理这些IO请求,这些请求是kernel threads。因此,如果您将此系统管道(these kernel threads)视为多线程的一部分,那么您的代码是多线程的。

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

在任何一种情况下,即使它们不是您应用程序中的专用线程,也会运行多个线程,或者它们是在应用程序启动之前创建的,并且它们将在您的应用程序存在后继续运行。