我会说,可能不会。虽然这个问题有点修辞,但请看一下 Jeffrey Richter 撰写的这篇文章/书籍摘录,停止疯狂(来自CLR 通过 C#的书)。它只讨论你问的那些事情。
如果我们只关心原始性能,那么任何机器上的最佳线程数都与该机器上的 CPU 数量相同。[...] 所有线程仍然有一个内核对象、内核模式堆栈和其他分配给它们的资源。这种因为便宜而随意创建线程的趋势必须停止。线程并不便宜——相反,它们很昂贵,所以要明智地使用它们。
我强烈推荐那本书。非常值得从前到后阅读,虽然它相当大,约 900 页。
多线程虽然是一个非常复杂的主题,并且不能简单地用几行来回答,但它高度依赖于您要实现的目标。与往常一样,这取决于您必须测量/评估/优化任何解决方案以获得最佳性能。但是,一般来说,只是例行地抛出线程可能不是一个好主意。附带说明一下,托管线程分配 1 MB 堆栈内存,这意味着在 .NET 应用程序中创建(并保持)线程可能非常浪费。
此外,仅仅因为胎面存在并不意味着它正在消耗完整的核心。它可能会做一些工作,但它也可能会闲置并等待一些工作发生(这是最有可能的情况,否则您的整体 CPU 消耗将不断接近 100 而不是 0)。然而,它们确实消耗,或者更准确地说,浪费了系统资源。
尽管引入了许多技术以使它们更易于使用(各种并行框架等),但引入线程会给您的应用程序增加大量额外的复杂性。但是,潜在的复杂性仍然存在,有时伪装成无害的,但随时准备爆发出它的真实本质(时序问题、死锁、调试复杂性等)。
简而言之,您可能会说,“除非有理由,否则不要使用多线程”。
即便如此,t(h) 还是轻描淡写。