根据系统规范确定要使用的最有效线程数

时间:2013-06-22 17:10:05

标签: c# .net multithreading performance operating-system

为给定系统确定的操作的最大/正确线程数如何?我有一个可以在1到100个线程中完成的操作。我可以运行一些测试并找出哪个是最有效的,但看起来它很大程度上取决于用户的系统。

这是否有先例,取决于核心数,操作系统等?

我在C#.NET工作,但我不确定这会有所作为。

3 个答案:

答案 0 :(得分:1)

对此没有简单的规则,它完全取决于这些线程正在做什么。如果它们正在刻录核心,则理想数量永远不会超过机器可用的核心数量。添加更多只是为操作系统提供额外的工作来在它们之间进行上下文切换。

但如果他们进行任何I / O,那么他们将被阻塞很多时间,等待I / O完成。在这种情况下,理想情况可能更大,但完全取决于I / O子系统中的并发性。

并不是理想的只是一个。如果线程执行完全由您的机器只有一个的资源绑定,则会出现这种情况。像内存总线或磁盘一样。

你必须衡量。查看维基百科的Amdahl's law文章,选择曲线变平的数字。注意缓存效果,使它看起来像你的程序在实践中做得更好。就像一遍又一遍地运行磁盘绑定程序,实际上从文件系统缓存而不是磁盘中获取数据。

答案 1 :(得分:0)

在完美的程序中,您应该使用的线程数是您拥有的处理器数量。

答案 2 :(得分:0)

.NET Framework 4.5中的线程池默认设置最小线程数,具体取决于可用内核的数量,如优化线程池中所述:http://www.albahari.com/threading/ > section并且如果它认为它将导致更好的吞吐量,将添加或退出线程。

您也可以手动设置要使用的最小和最大线程数,在您的情况下,它将是1和100。

文档: http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx