gpt4 book ai didi

.net - 多核使用、线程、线程池

转载 作者:行者123 更新时间:2023-12-02 20:30:12 24 4
gpt4 key购买 nike

我有一些关于多线程编程和多核使用的问题。

我特别想知道操作系统和/或框架(这是 .NET)如何处理频繁使用的核心。

这是我关于线程的问题:

  • 当产生一个新线程时,将该线程分配给特定核心的算法是什么?
    1. 循环类型的算法
    2. 随机
    3. 当前最少使用的核心
  • 如果不是当前使用最少的核心,那么确定此问题的此类代码是否会使线程的典型使用相形见绌,从而使事情变得更糟?
  • 线程在其生命周期内是否从一个核心移至另一个核心?如果是这样,这是否是为了处理由于某种原因“过度使用”的核心,因此操作系统尝试将线程转移到较少使用的核心以帮助系统?如果不是,那为什么不呢?

我的最后一个问题基本上是对上述问题的重用,是关于 .NET ThreadPool 类的,它处理 .BeginInvoke 等内容。这个类有做这些事情吗?如果不是,为什么不或者应该这样做?

有没有办法调整这个处理,向操作系统暗示这个特定的线程,当你给它分配一个核心时请多加注意,因为我知道它会使用大量的CPU。这有意义吗?或者“大量CPU”只是相对的,因此还不够好?

最佳答案

When a new thread is spawned, what is the algorithm for assigning the thread to a particular core?

这完全取决于操作系统。答案通常是经过大量修改的循环方案。每x毫秒,一个核心被中断,并在其上放置一个新线程(因此不存在“最少使用的核心”。只要有线程准备运行,每个核心就会有事情要做)。

在 Windows 中,我相信优先级最高的线程/进程总是被选择执行。 (因此,如果您有一个进程在单核系统上以高优先级运行,则该进程可能会在 100% 的时间内运行,从而导致其他所有进程都处于饥饿状态。当然,这仅适用于该进程从不阻塞的情况,而这在现实世界。

当然,由于 Windows 等现代操作系统很复杂,因此还有更多内容。某些进程有时会受到优先对待,但根据经验,Windows 总是会选择高优先级进程(这就是为什么在单核时代为进程提供“实时”优先级时,您几乎可以卡住计算机)

在 Linux 下,也会定期安排优先级较低的进程,只是频率不那么高。

但是你能做的最好的事情通常就是假设操作系统会制定出一个公平的方案,然后尝试与系统的其余部分很好地合作。 (无事可做时屈服/阻塞/ sleep ,允许其他线程运行)。

Are threads moved from one core to another during their lifetime?

当然。想象一下,您在双核系统上运行三个线程。向我展示一个公平的时间表,不涉及在核心之间定期移动线程。

My final question, which is basically a reuse of the above, is about the .NET ThreadPool class, which handles things like .BeginInvoke and such. Does this class do any of this stuff? If not, why not, or should it? What stuff? Thread scheduling and choosing cores to run on? No, the threadpool is simply a mechanism to reuse threads for muliple tasks, instead of having to create a new thread for every single task, and then closing it afterwards.

Is there any way to tweak this handling, sort of hint at the operating system that this particular thread

这就是线程/进程优先级的用途。如果您有一个线程必须获得大量 CPU 时间,即使有其他 CPU 密集型线程正在运行,也请提高该线程的优先级。但要小心处理。通常,运行的 CPU 密集型线程并不多,这意味着即使在正常优先级下,您也将获得 99.9% 的 CPU 时间。正如我所说,Windows 会非常积极地调度优先级较高的线程,因此只有在您确实这么想时才提高优先级。

关于.net - 多核使用、线程、线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/396137/

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