c++ - Linux - 确保专门为关键任务保留一个核心

标签 c++ linux multithreading affinity

我有一个在基于 Linux 的机器上启动的进程,该机器恰好有两个内核。

假设我的进程是系统中唯一的进程(我将忽略其他进程甚至系统进程)。

我的流程分为两部分:

  1. 关键性能代码
  2. 低优先级代码

另外假设我的主进程在 Core 0 上启动,我想专门为关键性能代码保留 Core 1。

我想将问题分为两个:

  1. 我如何确保我的进程中的每个线程(包括我已链接我的代码的第 3 方库,可能会调用 pthread_create 等)将始终打开新线程核心 0 ?

  2. 我如何编写一个测试来验证核心 1 除了性能关键路径之外绝对没有做任何事情?

我熟悉以下 API:

pthread_setaffinity_np

可以设置特定的线程关联,但我想知道是否有更底层的方法来确保即使是第 3 方库(从进程内部)创建的线程也将固定到核心 0。

也许我可以将进程的默认亲和性设置为核心 0,并将特定线程设置为核心 1?

最佳答案

您已经描述了您想要的解决方案:

Perhaps I can set the default affinity for the process to be Core 0 and for a specific thread - pin it to Core 1?

但是,也许问题在于您不确定如何实现这一目标。

Linux 提供 sched_setaffinity设置当前进程的亲和度。

要让新创建的线程在特定内核上运行,最简单的方法是初始化一个 pthread_attr_t ,并使用 pthread_attr_setaffinity_np 设置所需的核心亲和性.

关于c++ - Linux - 确保专门为关键任务保留一个核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31057990/

相关文章:

c++ - C++ 开源前端的选项

r - Rcpp 错误中的 cppFunction

linux - 如何使用 unix 删除每个备用数字

php - 安装package.json

python - 线程不会调用函数 (Python)

.net - 如何正确取消并重新启动BackgroundWorker进程?

c++ - Cygwin 警告命令

c++ - 运算符的初始化列表和 RHS

linux - 如何将此 ssh 命令转换为 ssh_config 文件?

java 。它总是以缓冲区大小发送吗?