如何找出最佳线程数量?

ytg*_*ytg 0 multithreading

我打算制作一个像网络连接一样的对等软件.通常我会为每个连接创建一个自己的线程来发送和接收数据,但在这种情况下,有300-500 +连接,这意味着不断创建和销毁很多线程,这将是一个很大的开销我猜.并且制作一个顺序处理所有连接的线程可能会减慢一些事情.(我对此不太确定.)

问题是:有多少线程可以处理这类问题?是否有可能在软件中进行计算,以便它可以决定在旧计算机上创建更少的线程,而没有更多的资源和更多的新资源?

这是一个理论问题,我不想让它实现或依赖于语言.但是我认为很多人都会建议像"只使用一个ThreadPool,它会处理类似的东西"所以让我们说它不会是一个.NET应用程序.(我可能不得不在旧的Delphi项目中使用代码的其他部分,因此语言可能是Delphi或C++,但还没有决定.)

Tob*_*oby 10

了解应用程序在负载下的性能是关键,正如在分析,测量和重新测试之前提到的那样.

作为一般指南,Goetz谈到了

threads = CPU数量+ 1

对于CPU绑定应用程序,和

CPU数量*(1 +等待时间/服务时间)

对于IO绑定上下文