设置CPU亲和性
即,某个线程固定跑在某个CPU的(某个)核上
/**
* 设置当前线程cpu亲和性
* @param i cpu索引,如果为-1,那么取消cpu亲和性
* @return 是否成功,目前只支持linux---代码块来自ZLtookit
*/
bool setThreadAffinity(int i) { #if (defined(__linux) || defined(__linux__)) && !defined(ANDROID) cpu_set_t mask; CPU_ZERO(&mask); if (i >= 0) { CPU_SET(i, &mask); } else { for (auto j = 0u; j < thread::hardware_concurrency(); ++j) { CPU_SET(j, &mask); } } if (!pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask)) { return true; } WarnL << "pthread_setaffinity_np failed: " << get_uv_errmsg(); #endif return false; }
以下转载自(https://blog.csdn.net/m0_46376834/article/details/134834253)
cpu_set_t 类型是一个位图,每个位代表一个 CPU 核心。通过设置和操作这个位图,可以控制进程或线程的 CPU 亲和性,即将其绑定到特定的 CPU 核心上。
以下是一些常用的操作 cpu_set_t 的函数和宏:
CPU_ZERO(cpu_set_t* set):将 set 中的所有位清零,表示没有任何 CPU 核心被设置。
CPU_SET(int cpu, cpu_set_t* set):将 set 中的第 cpu 位设置为 1,表示将对应的 CPU 核心添加到集合中。
CPU_CLR(int cpu, cpu_set_t* set):将 set 中的第 cpu 位清零,表示将对应的 CPU 核心从集合中移除。
CPU_ISSET(int cpu, cpu_set_t* set):检查 set 中的第 cpu 位是否被设置为 1,返回一个非零值表示已设置,否则返回 0。
使用 cpu_set_t 可以实现将进程或线程绑定到特定的 CPU 核心上,以提高程序的性能和可预测性。例如,在多核系统中,可以将不同的任务分配给不同的 CPU 核心来并行执行,以充分利用系统资源。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现