C# 可以在不同的内核上运行不同的线程(这是例外,而不是规则)。我已经使用24个核心服务器进行了一些密集的C++数学模拟运行。如果我在一台服务器的24个核心上并行运行24个独立的模拟,那么我会为每个模拟获得一个运行时间,比如说X秒

C# 可以在不同的内核上运行不同的线程(这是例外,而不是规则)。我已经使用24个核心服务器进行了一些密集的C++数学模拟运行。如果我在一台服务器的24个核心上并行运行24个独立的模拟,那么我会为每个模拟获得一个运行时间,比如说X秒,c#,performance,multithreading,C#,Performance,Multithreading,我注意到的一件奇怪的事情是,当只运行12个模拟时,使用24个内核中的12个,而其他12个内核处于空闲状态,那么每个模拟都在Y秒的运行时间内运行,其中Y远大于X!当查看处理器使用情况的任务管理器图时,很明显,一个进程并不是只停留在一个核心上,而是在多个核心之间交替进行。也就是说,在核之间切换以使用所有核会减慢计算过程 当我只运行12个模拟时,我维护运行时的方式是使用剩余的12个内核在侧面运行另外12个“垃圾”模拟 结论:当使用多核时,100%使用它们,为了降低利用率,运行时间会增加 对于单核CPU

我注意到的一件奇怪的事情是,当只运行12个模拟时,使用24个内核中的12个,而其他12个内核处于空闲状态,那么每个模拟都在Y秒的运行时间内运行,其中Y远大于X!当查看处理器使用情况的任务管理器图时,很明显,一个进程并不是只停留在一个核心上,而是在多个核心之间交替进行。也就是说,在核之间切换以使用所有核会减慢计算过程

当我只运行12个模拟时,我维护运行时的方式是使用剩余的12个内核在侧面运行另外12个“垃圾”模拟

结论:当使用多核时,100%使用它们,为了降低利用率,运行时间会增加

对于单核CPU, 实际上,业绩取决于你所指的工作。 在您的情况下,对于由CPU完成的计算,在这种情况下,如果您的母板支持超频,超频将有所帮助。否则,CPU无法进行比CPU速度更快的计算

为了多核CPU 正如上面的答案所说,如果设计得当,性能可能会提高,如果所有核心都得到充分利用

在单核CPU中,如果线程是在用户级实现的,那么如果线程中有阻塞系统调用(如I/O操作),则多线程将无关紧要。因为内核不知道用户级线程

因此,如果进程执行I/O,那么可以在内核空间中实现线程,然后可以为不同的作业实现不同的线程。
(这里的答案是基于理论的。)

正如@coxymla指出的,可能有一个CPU具有超读功能。这实际上可能会提高执行速度,即使CPU只有一个内核。感谢您的回复,让我们暂时忘记多核。有人问过我这样的问题,如果计算速度不快,我们为什么要在单核上进行多线程处理。我已经向他们解释过,多线程用于响应性、通信相关、数据库相关的工作。但是许多人相信多线程可以提高计算速度。我想知道怎么做。谢谢您的时间。@Harsha,@leppie:超线程技术适用于单核。它使用CPU“空闲”时间进行伪并行执行。From:如果当前任务在没有超线程的处理器中无法使用执行资源,特别是当处理器停止运行时,配备超线程的处理器可以使用这些执行资源执行另一个计划任务。(处理器可能会因缓存未命中、分支预测失误或数据依赖而暂停。)@leppie,这实际上取决于他们将在那里使用的算法类型。一些算法可以分成多个独立的计算“分支”,在这种情况下,整个过程可以在多核场景中得到极大改进。除非我们知道细节,否则我不会简单地说“不”。@Artiom Chilaru:我确实理解你的意思,但我认为我在回答中涵盖了这些方面。请注意,这适用于CPU密集型任务,适用于执行阻塞操作(IO绑定/与数据库对话/等)的任务。多线程可以加快速度,虽然执行异步或非阻塞操作可以进一步加快速度,但并不是所有API都有非阻塞变体,而且那些有非阻塞变体的API可能更难编程。这并非完全正确,毕竟,无论硬件是什么,执行并行编译几乎总是更快,感谢您发布了答案和PDF文件。我有几个要求/问题:1。您是否有任何项目文件或源代码,通过它们可以学习单处理器上的多线程以提高性能。如果您对此问题有任何资料或链接。2.您是否有任何线程指南,任何链接请发送给我。3.你有线程调试工具吗。谢谢你们的时间和回复。你好!很抱歉,我没有任何源代码。决定程序工作方式的因素很大程度上取决于CPU的体系结构。我没有任何源代码或调试工具,很抱歉,但我已经用更多的链接编辑了我的文章!多线程的使用时间比多个内核的使用时间长。+1对于响应性,如果用户能够在进行大型计算时与应用程序交互并执行其他操作,则应用程序可能会显示得更快。这种开销似乎来自线程移动到另一个内核后的冷缓存。理想情况下,操作系统会知道移动这些线程是没有意义的。