【问题标题】:Number of threads assigned to threadpool for TCP network?分配给 TCP 网络线程池的线程数?
【发布时间】:2014-07-03 17:53:24
【问题描述】:

所以要提供尽可能多的信息: 我已经设置了一个在前台线程上运行的异步 TCP 服务器,该线程处理接受客户端到服务器以及在接受客户端时将它们分配给线程。目前,我已经设置了一个简单的 lambda 来为客户端分配一个线程池中的线程。以前我为每个客户端使用一个线程,而不是将客户端分配给 ThreadPool。但是,有人告诉我,当您拥有数百个线程时,为每个客户端创建一个线程在 RAM/CPU 上是有害的。

这让我想知道:我应该通过 ThreadPool.SetMaxThreads 和 ThreadPool.SetMinThreads 分配“workerThreads”和“completionPortThreads”的最大/最小数量,以支持我运行的“n”个客户端异步操作?

【问题讨论】:

    标签: c# multithreading tcp threadpool


    【解决方案1】:

    对于许多客户端,您应该使用异步套接字 IO。这在 C# 5 中变得相当容易,在 C# 4 中也很容易,而且以前也可以做到。

    这样做,您将在操作进行时使用零线程。无需维护线程池或更改设置。

    【讨论】:

    • 现在只是让初学者帮助我开始:哪些方法为我提供了此功能?
    • 例如,Stream.ReadAsync 或 Socket.BeginReceive。对于 Socket,您必须编写自己的 TAP 包装器。我相信 Nito.Async(Ex) 提供了一些。你就说await someStream.ReadAsync(...);。希望这可以帮助您入门,因为还有更多信息需要了解。
    • 我推荐异步 IO,因为您谈到了数百个客户端。这是异步 IO 的关键场景。如果只有几个客户,几十个,你不一定需要麻烦。
    • 嗯……还是不满意。不过,我们可以回到最初的线程池问题吗?
    • 好吧,你的问题让我很困惑。您使用的是同步 IO 还是异步 IO?你在最后一句中说它是异步的,但你为什么需要线程呢?我已经解释过异步 IO 不以任何方式使用线程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2010-11-10
    • 2014-06-30
    相关资源
    最近更新 更多