C# 为TCP网络分配给线程池的线程数?

C# 为TCP网络分配给线程池的线程数?,c#,multithreading,tcp,threadpool,C#,Multithreading,Tcp,Threadpool,因此,为了提供尽可能多的信息: 我已经设置了一个在前台线程上运行的异步TCP服务器,该线程处理在服务器上接受客户机以及在接受客户机时将其分配给线程。目前,我已经设置了一个简单的lambda来在线程池中为客户端分配一个线程。以前,我使用每个客户机一个线程,而不是将客户机分配到线程池。然而,有人告诉我,当您有几百个线程时,在RAM/CPU上为每个客户机创建一个线程是有害的 这让我不禁要问:我应该通过ThreadPool.SetMaxThreads和ThreadPool.SetMinThreads分配

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


这让我不禁要问:我应该通过ThreadPool.SetMaxThreads和ThreadPool.SetMinThreads分配多少最大/最小数量的“workerThreads”和“completionPortThreads”来支持异步操作上运行的“n”个客户端?

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


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

现在,仅为初学者提供帮助:哪些方法为我提供了此功能?例如,Stream.ReadAsync或Socket.BeginReceive。对于Socket,您必须编写自己的TAP包装。我相信Nito.Async(Ex)提供了一些功能。您只需说
等待someStream.ReadAsync(…)。希望这能让你开始,因为还有更多的东西需要了解。我推荐异步IO,因为你提到了数百个客户端。这是异步IO的关键场景。如果只有几个客户,几十个,你不一定需要麻烦。嗯。。。还是不满意。再说一遍,我们可以回到线程池的原始问题吗?好的,你的问题让我困惑。您使用的是同步IO还是异步IO?您在最后一句中说它是异步的,但为什么您需要线程呢?我已经解释过异步IO不以任何方式使用线程。