【问题标题】:getting cpu number of a given thread in C#在 C# 中获取给定线程的 cpu 编号
【发布时间】:2011-05-30 17:33:06
【问题描述】:

在 C# 中,是否有任何方法可以获取正在执行线程的内核的 cpu id(或内核编号)?我有一个四核处理器,我想知道在跨越一些线程时,它们被分配了哪些内核?

我发现 System.Environment.ProcessorCount 给出了当前 cpu 的总数,但是有没有办法知道哪个特定的 cpu 实例正在执行给定的线程。

【问题讨论】:

  • 线程在其整个生命周期内不一定会保留在一个特定的 CPU 上。
  • 一个线程可以在一行代码中间切换内核
  • 控制线程分配的唯一方法是使用 CPU 亲和性。
  • 你为什么想知道这个?可能有更合适的技术。
  • @bestsss,你不能在 C# 不安全的代码中这样做。这将需要一些汇编代码。像 asm { mov eax,1; cpuid; shr ebx,24;之后 ebx 寄存器将具有 APIC,我从未使用过托管 C++,也许可以用它来完成。

标签: c# multithreading


【解决方案1】:

我不知道可以提供此功能的本机 .NET 功能。但如果您准备使用 P/Invoke 并在 Windows 2003、Vista 或更高版本上运行,则可以致电GetCurrentProcessorNumber

当然,这只会为您提供在该特定时间片执行线程的 CPU(核心),并且下次调度线程时,它可能会在完全不同的核心上运行,即使操作系统会努力调度出于性能原因,在同一内核上使用线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2022-10-12
    • 1970-01-01
    相关资源
    最近更新 更多