4
在Linux中,是能夠固定線程對某些核心執行。如果可能的話,我也想知道是否有可能在某個內核上獨佔地執行一個線程,即不允許在該線程執行時在該內核上執行任何其他線程。
在Linux中,是能夠固定線程對某些核心執行。如果可能的話,我也想知道是否有可能在某個內核上獨佔地執行一個線程,即不允許在該線程執行時在該內核上執行任何其他線程。
這就是pthread_setaffinity_np(3)
所做的。
的
pthread_setaffinity_np()
函數設置的 線程的線程通過cpuset指向的CPU集中的CPU親和力掩碼。如果調用 成功,並且該線程當前未在cpuset中的某個CPU 上運行,則會將其遷移到其中一個CPU。
舉個例子:
cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(3, &set); /* Run only on the third CPU. */
pthread_setaffinity_np(thr, CPU_SETSIZE, &set);
您還可以sched_setaffinity(2)
和gettid
,但該手冊中提到,做到這一點:
如果您正在使用POSIX線程API,則使用
pthread_setaffinity_np(3)
而不是sched_setaffinity()
。
可能值得注意的是,調度程序的工作是以高效的方式將線程分配給cpus。你有什麼理由需要再次猜測它嗎? –