.net - Socket ReceiveFromAsync 是隐式多线程的吗?

标签 .net multithreading sockets packets

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

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

谢谢

最佳答案

所有异步IO函数都会创建/利用IO完成端口,它是进程提交的请求队列。每当进程进行异步 IO 调用时,都会在此队列上提交此请求。然后,一个特殊的线程池处理这些 IO 请求,这些是内核线程。因此,如果您将此系统管道(这些内核线程)视为多线程的一部分,那么您的代码就是多线程的。

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

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

关于.net - Socket ReceiveFromAsync 是隐式多线程的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365522/

相关文章:

c# - Ranorex XPATH 问题

java - 运行两个线程时出现 ConcurrentModificationException 问题

Java 小程序 java.security.AccessControlException

c# - 在 C# 应用程序之间流式传输数据

java - 如何检测客户端何时与服务器断开连接

c# - IComparable 的接口(interface)约束

.net - 不受 ClearType 全局设置影响的 WinForm 应用程序

c# - 使用 AppDomain 加载/卸载外部程序集

android - 将数据从线程传递到 Activity

c# - 线程 : Setting checkbox's visibility