3

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

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

谢谢

4

1 回答 1

3

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

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

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

于 2011-03-04T05:05:37.153 回答