我们可以获得与处理器有关的几条不同的信息
物理处理器数量
核心数
逻辑处理器数量
这些都可以有所不同。对于具有2个启用双核超线程的处理器的计算机,有2个物理处理器,4个内核和8个逻辑处理器。
逻辑处理器的数量可通过Environment类获得,但其他信息仅可通过WMI获得(并且可能必须安装一些修补程序或Service Pack才能在某些系统上获得它)-
在项目中添加对System.Management.dll的引用。在.NET Core中,该引用作为NuGet包可用(仅适用于Windows)。
class Program{ public static void Main(){ foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get()){ Console.WriteLine("Number Of Physical Processors: {0} ", item["NumberOfProcessors"]); } Console.ReadLine(); } }
输出结果
Number Of Physical Processors: 1
class Program{ public static void Main(){ int coreCount = 0; foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get()){ coreCount += int.Parse(item["NumberOfCores"].ToString()); } Console.WriteLine("Number Of Cores: {0}", coreCount); Console.ReadLine(); } }
输出结果
Number Of Cores: 2
class Program{ public static void Main(){ Console.WriteLine("Number Of Logical Processors: {0}", Environment.ProcessorCount); Console.ReadLine(); } }
输出结果
Number Of Logical Processors: 4
问题内容: 在Linux中,假设线程的pid为[pid],则从目录/ proc / [pid]中我们可以获得许多有用的信息。例如,这些proc文件/ proc / [pid] / status,/ proc / [pid] / stat和/ proc / [pid] / schedstat都是有用的。但是,如何获取线程正在运行的CPU核心号?如果线程处于睡眠状态,我如何才能知道线程在再次调度后将在
问题内容: 我有这个脚本,但是我不知道如何获取打印输出中的最后一个元素: 最后一个元素应该是CPU数量减1。 问题答案: 将计算以“处理器”开头的行数 对于具有超线程的系统,可以使用 应该返回(例如)(而上面的命令将返回)
问题内容: 如何从Java代码中找到应用程序可用的内核数量? 问题答案: 如果小于1,则说明您的处理器即将死机,或者JVM中存在严重的错误,或者Universe即将崩溃。
问题内容: 我想用Java解决带有多个线程的数学问题。我的数学问题可以分为多个工作单元,我想通过几个线程来解决。 我不希望有固定数量的线程在工作,而是与CPU核心数量匹配的线程数量。我的问题是,为此我在互联网上找不到简单的教程。我发现的只是带有固定线程的示例。 如何才能做到这一点?你能提供例子吗? 问题答案: 你可以通过使用静态运行时方法,确定提供给Java虚拟机的进程数availableProc
问题内容: 大概有一个库或简单的asm blob,可以获取我正在执行的当前CPU的编号。 问题答案: 使用以确定在其上调用线程运行的CPU。请参阅(系统调用)和(库包装器)。但是,请注意其内容: 仅在调用时保证放置在cpu中的信息是最新的:除非已使用sched_setaffinity(2)修复了CPU关联性,否则内核可能随时更改CPU。(通常不会发生这种情况,因为调度程序会尝试最大程度地减少CPU
所以从一开始:当计算机启动时,引导线程(通常是处理器0中核心0中的线程0)就开始从地址0xFFFFFFF0中提取代码。所有剩下的CPU/核都处于特殊的Hibernate状态,称为等待-SIPI(WFS)。 然后,在OS加载后,它开始管理进程,并在CPU/核之间调度它们,通过高级可编程中断控制器(APIC)向WFS中的每个线程发送一个特殊的处理器间中断(IPI)(启动IPI)。SIPI包含该线程应该