.Net Core中获取Parallel并行任务运行CPU核心编号的方法
实现方案
.NET 5 原生提供了直接获取当前线程运行CPU核心编号的方法,无需调用任何外部系统命令,具体实现如下:
核心实现逻辑
你可以直接使用System.Threading.Thread类的GetCurrentProcessorId()方法,该方法会返回当前线程正在运行的处理器核心编号,底层适配Linux/Windows等不同操作系统,在Ubuntu 20.04环境下会直接调用系统原生的sched_getcpu()接口获取数据,完全满足你的需求。
代码示例
using System; using System.IO; using System.Threading; using System.Threading.Tasks; class Program { static void Main(string[] args) { // 替换为你的待处理文件目录路径 string targetDir = "/path/to/your/files"; string[] filesToProcess = Directory.GetFiles(targetDir); Parallel.ForEach(filesToProcess, file => { // 获取当前运行的CPU核心编号 int coreId = Thread.GetCurrentProcessorId(); // 输出你需要的信息 Console.WriteLine($"待处理文件路径:{file},当前运行CPU核心编号:{coreId}"); // 这里补充你原本的文件处理逻辑 // YourFileProcessLogic(file); }); } }
注意事项
GetCurrentProcessorId()返回的是调用时刻线程所在的核心编号,操作系统可能会在后续运行过程中调度线程切换核心,同个任务前后两次调用可能得到不同的结果- 输出的核心编号从0开始计数,和你物理CPU的核心编号一一对应
- 如果你需要固定线程绑定到特定核心运行,可以通过P/Invoke调用Linux原生的
pthread_setaffinity_np方法设置线程亲和性,普通场景下无需额外配置
内容的提问来源于stack exchange,提问作者fire_water
相关产品推荐
相关产品推荐

