我目前正在开发高性能原始套接字应用程序。
我正在使用 ReceiveFromAsync 来接收数据包。这可能听起来像是一个愚蠢的问题,但这是否是隐式线程化的?我不确定是否需要取出接收到的数据包并从处理中退出,以确保在处理当前数据包时不会阻塞任何其他数据包。该文档并没有真正提到这一点。 3.5 套接字的示例代码没有线程化它,所以我最初的猜测是它是隐式处理的。
谢谢
最佳答案
所有异步IO
函数都会创建/利用IO完成端口,它是进程提交的请求队列。每当进程进行异步 IO 调用
时,都会在此队列上提交此请求。然后,一个特殊的线程池处理这些 IO 请求,这些是内核线程
。因此,如果您将此系统管道(这些内核线程
)视为多线程的一部分,那么您的代码就是多线程的。
如果您将通过异步 IO
调用提供给您的抽象视为您的起点,那么您的代码可能不是多线程的。
在任何一种情况下,都有多个线程正在运行,即使它们不是应用程序中的专用线程,或者它们是在应用程序启动之前创建的,并且在应用程序存在后它们将继续运行。
关于.net - Socket ReceiveFromAsync 是隐式多线程的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365522/