如何计算n个线程和fork()的创建和终止时间?

时间:2014-04-27 12:07:31

标签: c++ c multithreading pthreads fork

其中n是开头读取的值。

首先,在创建线程和fork()时,应该怎么做?只需return NULL或输出一些东西?

在阅读n之后,我想过做这样的事情,测量线程:

pthread_t threads[n];
begin = clock();
for (i = 0; i < n; i++) {
    //cout << " main() created thread number: " << i << endl;
    ret = pthread_create(&threads[i], NULL, Threads, (void *)i);
}
end = clock();
time = (double)(end - begin) / CLOCKS_PER_SEC;

这是准确的吗?计算它的好方法?对于fork(),我想到了这样的事情:

begin = clock();

if (fork() == 0) {
    for (i = 0; i < n; i++) {
        j += i;
    }
    exit(0);
}

end = clock();
time = (double)(end - begin) / CLOCKS_PER_SEC;

1 个答案:

答案 0 :(得分:0)

我决定使用其他两个代码,其中fork()和线程会执行:

void do_nothing() {
   int i;
   i = 0;
 }

我发现计算时间的最好方法是执行调用时间。对于n = 50000,我获得了:

$ time ./forks

real    0m25.064s
user    0m3.389s
sys     0m12.731s

$ time ./pthreads

real    0m2.164s
user    0m0.262s
sys     0m1.616s

因此,我使用fork()创建了流程,并创建(和销毁)了仅创建变量并为其赋予值0的线程。