gpt4 book ai didi

multithreading - 我们真的需要运行所有这 1000 个线程吗?

转载 作者:行者123 更新时间:2023-12-04 00:06:46 29 4
gpt4 key购买 nike

在 Windows 8 中使用花哨的新任务管理器,我注意到一些让我感到惊讶的事情,当前使用/运行的线程大约为 1k。

因为我刚刚接触到了多线程软件和游戏背后的教程和理论。我的假设是,如果您想从您的软件中获得最佳性能,那么当有工作要做时,每个逻辑处理器应该始终至少有一个线程。因为该处理器否则将“未使用”。

但是看到我已经运行了大约 1000 个线程,难道所有的处理器都已经开始工作了吗?

如果处理能力已经被其他 50 个左右的进程使用,为什么要多线程?
管理所有这 1000 个线程不会占用足够的 CPU 吗?
为什么我作为程序员应该处理线程而不是操作系统?如果它给每个进程一个线程,我的软件不会仍然是“多线程的”吗?。

使用更多线程只是一种优先处理进程的更好方法吗?

最佳答案

我会说,可能不是。虽然这个问题有点修辞,但请看一下这篇文章/书籍摘录,作者 Jeffrey Richter,Stop the madness (来自本书 CLR via C# )。它只讨论你问的那些事情。

If all we cared about was raw performance, then the optimum number of threads to have on any machine is identical to the number of CPUs on that machine. [...] All threads still have a kernel object, kernel-mode stack, and other resources allocated to them. This trend of creating threads willy-nilly because they are cheap has to stop; threads are not cheap—rather, they are expensive, so use them wisely.



我强烈推荐那本书。非常值得从头到尾阅读,虽然它相当大,约 900 页。

多线程虽然是一个非常复杂的主题,不能简单地用几行来回答,它高度依赖于你想要实现的目标。与往常一样,这取决于您必须衡量/评估/优化任何解决方案以获得最佳性能。然而,通常只是定期抛出线程可能不是一个好主意。作为旁注,托管线程分配 1 MB 堆栈内存,这意味着在 .NET 应用程序中创建(并保持)线程可能非常浪费。

此外,仅仅因为存在胎面并不意味着它正在消耗完整的核心。它可能会做一些工作,但也可能会闲置并等待一些工作的到来(这是最有可能的情况,否则您的整体 CPU 消耗将不断接近 100 而不是 0)。然而,它们确实会消耗,或更准确地说,会浪费系统资源。

引入线程会显着增加应用程序的额外复杂性,尽管引入了许多技术以使其更易于使用(各种并行框架等)。潜在的复杂性仍然存在,有时会伪装成无害的,但总是准备好爆发出它的真实本质(时序问题、死锁、调试复杂性等)。

简而言之,您可能会说,“除非有理由,否则不要使用多线程”。
即便如此,t(h) 还是要轻描淡写。

关于multithreading - 我们真的需要运行所有这 1000 个线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988102/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com