生產者-消費者模型:生產者運算密集(需 1 核心),消費者 I/O 密集(需多核心),透過 CPU 親和性綁定核心提升效能。
# 查看程式 4321 當前親和性 taskset -p 4321 # 設定程式 4321 綁定核心 1,2,3 taskset -cp 1,2,3 4321 # 啟動程式並綁定核心 1,2,3-5 taskset -c 1,2,3-5 /usr/bin/myapp
-p:操作現有 PID-c:以核心清單格式指定(支援範圍 3-5)#define _GNU_SOURCE
#include <sched.h>
#include <stdio.h>
#include <unistd.h>
int set_cpu_affinity(int cpu_id) {
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(cpu_id, &mask);
if (sched_setaffinity(0, sizeof(mask), &mask) == -1) {
perror("sched_setaffinity");
return -1;
}
return 0;
}
int get_cpu_affinity() {
cpu_set_t mask;
if (sched_getaffinity(0, sizeof(mask), &mask) == -1) {
perror("sched_getaffinity");
return -1;
}
for (int i = 0; i < CPU_SETSIZE; i++) {
if (CPU_ISSET(i, &mask)) printf("CPU %d ", i);
}
printf("\n");
return 0;
}
CPU_ZERO 清零、CPU_SET 設位、CPU_ISSET 檢測int num_cores = sysconf(_SC_NPROCESSORS_CONF);
printf("系統邏輯核心數: %d\n", num_cores);
CAP_SYS_NICE 權限(通常 root 或設定 setcap)perf、htop 觀察實際負載分佈