【发布时间】:2021-12-27 13:12:21
【问题描述】:
我正在尝试 fork 的 CoW(查看编辑了解更详细的背景,可能完全不相关)
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#define N 262144
struct {
int n;
int padding[1023];
} arr[N];
int main() {
int i, sp = 0, t, tx = clock();
for (i=0; i<N; ++i) arr[i].n = i;
printf ("Init Time: %d\n", clock()-tx);
#if 1
sp = fork();
if(!sp) _exit(0);
waitpid(sp, &sp, 0);
#endif
// 5045 without fork
// 104192 with fork
t = clock();
for (i=0; i<N; ++i) arr[i].n = -i;
printf ("Runner %d Time: %d\n", sp, clock() - t);
getchar();
return 0;
}
fork 使以后的内存访问变慢。
fork 复制会使其变慢吗?如果是这样,为什么?我在 Ubuntu 20.04.3 LTS 上运行
【问题讨论】:
-
你忘了打电话给waitpid(2),你总是应该测试,并保留fork(2)的结果,这可能会失败!另请阅读 fork 上的维基页面 - 请注意 copy-on-write 技术和技巧。
-
@BasileStarynkevitch
waitpid没有帮助。编辑问题 -
非常好的问题。我喜欢这些基准测试。