如何获取Win32中的内核数量?

Ala*_*lan 4 c windows winapi multithreading cpu-cores

我在Windows上编写一个程序,需要运行与可用内核一样多的线程.但我不知道如何获得核心数量.有任何想法吗?

Jam*_*lis 6

你可以调用GetSystemInfoWinAPI函数; 它返回一个SYSTEM_INFOstruct,它具有处理器数(这是具有多个核CPU的系统上的核心数).

  • dwNumberOfProcessors是逻辑处理器数,不是核心数。 (2认同)
  • 在 32 位系统上该值限制为 32,在 64 位系统上限制为 64,因为它只返回当前处理器组中的处理器数量。在具有更多内核的系统上,它将不会返回正确的值。对于在 WOW64 下运行的 32 位进程,它也不会返回正确的值。 (2认同)

Jos*_*ved 5

您可以阅读NUMBER_OF_PROCESSORS个环境变量.

  • 调用API函数通常更好,而不是依赖于辅助环境变量(在运行程序之前可以通过其他方式更改). (7认同)
  • 根据问题的目的,这可能是更好的答案.如果你想知道如何确定要启动多少个线程的内核数量,那么应该考虑这个环境变量,因为四核上的父进程可以开始处理并传递它们的值为2而不是4.在90%的情况下,这正是所需要的(除非开发人员意识到只应使用由操作系统控制的完整系统OS利用率感知线程池,可能需要5到10年.程序员会被延迟). (3认同)