【问题标题】:Is there a way to lock a process to a CPU?有没有办法将进程锁定到 CPU?
【发布时间】:2011-03-29 22:00:40
【问题描述】:

我正在考虑开发一个应用程序,该应用程序将在六核机器上运行六个异步任务,每个核上一个。

但是是否可以将任务锁定到自己的核心?

这个想法是让它们主要由自己运行,但有时通过共享内存区域进行通信。但是,我希望任务尽可能不受干扰地运行。

【问题讨论】:

  • 你真的确定你会比调度程序更好地决定每个任务应该在哪个 CPU 上运行吗? :-)
  • @R..,不确定,但我有一个很好的预感。原因是正好有 6 件事要做,它们应该尽可能不中断地异步运行。

标签: c linux api


【解决方案1】:

您正在寻找的概念称为“线程亲和性”。它是如何实现的以及请求它的接口是特定于操作系统的。

在 Linux 下,试试sched_setaffinity()。 glibc 也可能提供 pthread_attr_setaffinity_np()。

【讨论】:

    【解决方案2】:
    taskset -c cpunum yourprocess
    

    做你想做的事。 可以改为提供 PID,这样您就可以将单个线程设置为 cpu。如果您想从自己的程序中更改 cpu 亲和性,请使用 sched_setaffinity()

    【讨论】:

      【解决方案3】:

      不锁定,但可以为进程关联cpu affinity

      【讨论】:

        【解决方案4】:

        仅作记录,另一种方法,不涉及编程: 打开任务管理器,转到进程选项卡,右键单击您的进程并选择设置关联...

        【讨论】:

        • 问题已被标记为 Linux - 你不能假设连鼠标都已连接,更不用说带有“任务管理器”的完整 gui
        • @Mat 你完全正确。无论如何,这可能对其他人有所帮助。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-15
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多