我可以以编程方式选择我的线程应运行的多核CPU的哪个核心?

Mur*_*ali 7 linux

还是由操作系统控制?我听说谷歌的新Go语言有一个内置的功能,让程序员去那么细致,或者我理解错了?

Sam*_*iao 3

对于 Linux 操作系统,sched_setaffinity就是你的答案。从 Linux 内核 2.5.8 开始支持它。

\n\n

姓名

\n\n

sched_setaffinity, sched_getaffinity \xe2\x80\x94 设置并获取进程的 CPU 亲和性掩码

\n\n
#define _GNU_SOURCE\n#include <sched.h>\n\nint sched_setaffinity(  pid_t pid,\n    size_t cpusetsize,\n    cpu_set_t *mask);\n\nint sched_getaffinity(  pid_t pid,\n    size_t cpusetsize,\n    cpu_set_t *mask);\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

关联掩码实际上是每线程的属性,可以为线程组中的每个线程独立调整。调用 gettid(2) 返回的值可以在参数 pid 中传递。将 pid 指定为 0 将为调用线程设置属性,并传递调用返回的值getpid(2) 将为线程组的主线程设置属性。(如果您使用的是 POSIX\n 线程 API,则使用\n pthread_setaffinity_np(3) 而不是\n sched_setaffinity()。)

\n
\n