在效率下降之前,我可以生成多少个线程?

时间:2010-09-21 03:44:38

标签: multithreading visual-studio-2008

是否有任何公式,可能涉及RAM& CPU的数量,这可以让我大致了解在它开始效率低下并减慢PC速度之前我可以生成多少个线程?

我想加载测试另一台机器,所以想要像pobbile一样快地发送请求。但如果他们只是互相帮助就没有产生一百万个线程的意义。


编辑:线程正在进行远程过程调用(SOAP),因此将阻止等待调用返回。

4 个答案:

答案 0 :(得分:3)

这取决于线程正在做什么。如果他们正在进行计算,那么数字会更低。如果他们在等待I / O,那么你可以拥有更多。

但是,如果他们在等待I / O,那么使用异步I / O apis可能比使用多个线程更好地实现相同的结果。

答案 1 :(得分:2)

如果所有线程都处于活动状态并且没有阻塞等待某些事情,那么每个CPU基本上只有一个线程(核心真的)。除此之外,您依靠操作系统在给定CPU上的线程之间进行上下文切换。

但这一切都取决于线程在做什么。如果他们大部分时间都处于休眠状态或等待异步IO操作,那么你大多只需要担心堆栈使用的内存,我相信每个线程默认大约1MB。

答案 2 :(得分:1)

其他答案当然是正确的; “这取决于”。如果线程忙于进行CPU密集型工作,那么可用的核心数量就超过了。但假设他们在等待外部结果,它可能会有很大差异。

我经常发现这个问题可以通过应用程序的体系结构和要求来解决;你需要尽可能多的线程。

但是如果你可能拥有无限数量的线程,你可能最终会产生,我认为这听起来像是ThreadPool自己的任务;让它决定实际运行的线程数。

答案 3 :(得分:0)

首先,启动一个线程本身可能是一个非常慢的操作。当你启动一个线程时,必须分配空间,可以调用DLL中的入口点等。如果你有比可用内核多得多的线程,那么你的大多数线程都不会在任何给定的时刻运行。即他们使用资源而不做任何贡献。

很难给出确切数量的线程以获得最佳性能,因为它取决于线程的作用,但通常不应超过可用内核的数量。请记住,您不能拥有比可用核心数更多的运行线程。