【问题标题】:Is Socket ReceiveFromAsync implicltly multi threaded?Socket ReceiveFromAsync 是否隐含多线程?
【发布时间】:2011-03-22 21:16:10
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: .net multithreading sockets packets


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-04-18
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多