我在Windows上编写一个程序,需要运行与可用内核一样多的线程。但我不知道如何获得核心数量。有什么想法吗?
答案 0 :(得分:6)
您可以调用GetSystemInfo
WinAPI函数;它返回一个SYSTEM_INFO
结构,它具有处理器数(这是具有多个核心CPU的系统上的核心数)。
答案 1 :(得分:5)
您可以阅读NUMBER_OF_PROCESSORS个环境变量。
答案 2 :(得分:1)
即使这个问题涉及.NET和你的C,基本响应应该有所帮助:
答案 3 :(得分:1)
正如@ Changming-Sun在上面的评论中提到的,GetSysInfo返回逻辑处理器的数量,该数量并不总是与处理器核心的数量相同。在支持超线程的计算机(包括大多数现代的Intel CPU)上,一个内核上可以运行多个线程(从技术上讲,一个线程将在同一内核上加载多个线程上下文)。要获得处理器核心数量,需要调用GetLogicalProcessorInformation并进行一些编码工作。基本上,您将获得SYSTEM_LOGICAL_PROCESSOR_INFORMATION条目的列表,并且必须计算设置了RelationProcessorCore的条目的数量。 Microsoft提供的GetLogicalProcessorInformation文档中如何进行编码的一个很好的示例: https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getlogicalprocessorinformation
答案 4 :(得分:0)
键入" cmd"在Windows启动并打开" cmd.exe"。 现在输入以下命令:
WMIC CPU Get /Format:List
你会发现像" NumberOfCores"和" NumberOfLogicalProcessors"。通常,逻辑处理器通过线程实现。因此,这种关系通常会像;
NumberOfLogicalProcessors = NumberOfCores *每个核心的线程数。
由于每个核心服务于一个处理单元,因此通过线程化,逻辑处理单元在现实空间中实现。
更多信息here。