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

How to count the time of creation and termination of n threads and fork()'s?

本文关键字:fork 创建 终止 时间 何计算 计算 线程      更新时间:2023-10-16

其中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;

我决定获得另外两个代码,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赋予它们。