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

本文关键字:有效 线程 系统 | 更新日期: 2023-09-27 18:19:26

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

根据内核、操作系统等的数量,有先例吗?

我在C#中工作,尽管我不确定这会有什么不同。

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

这没有简单的规则,它完全取决于这些线程在做什么。如果他们正在烧芯,那么理想的数量永远不会超过机器可用的芯数。添加更多内容只会给操作系统带来额外的工作来在它们之间切换上下文。

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

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

你必须测量一下。查阅维基百科上关于Amdahl定律的文章,选择曲线变平的数字。要注意缓存效果,这些缓存效果会使程序看起来比实际应用中做得更好。就像一遍又一遍地运行磁盘绑定程序,实际上是从文件系统缓存而不是磁盘中获取数据。

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

.NET framework 4.5中的线程池默认情况下根据可用内核的数量设置要使用的最小线程数,如下所述:http://www.albahari.com/threading/在优化线程池部分中,如果它认为这将带来更好的吞吐量,则会添加或退出线程。

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

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