gpt4 book ai didi

c - 操作系统 : Multiple Threads Slowing Down Program (C)

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:34 25 4
gpt4 key购买 nike

这个想法是编写一个程序,它接受一些随机数来创建,然后在用户输入的任意数量的线程之间分配负载,并测量我们在使用多线程时获得的速度提升。我的问题;但是,我添加的线程越多,我的程序运行得越慢。不知道哪里出了问题。到目前为止,这是我的代码片段:

...
for (i=0; i<numThreads; i++){
vals *values;
values = (vals *)malloc(sizeof(vals));
values->randoms = count;
values->id = i;
pthread_create(&tid[i], NULL, run, (void *) values);
}

for (i=0; i<numThreads; i++)
pthread_join(tid[i], NULL);

timeElapsed = getMilliSeconds() - timeStart;
printf("Elapsed time: %lf seconds\n",(double)(timeElapsed/1000.0));

exit(EXIT_SUCCESS);
}

void *run(void *arg) {
vals *values;
long long int i;
long long int randoms;

values = (vals*)arg;
randoms = values->randoms;
srandom(values->id);

for (i = 0; i < randoms; i++) {
random();
}

pthread_exit(NULL);
}

vals 是一个包含两个 int 值(randoms 和 id)的结构。 randoms 包含要生成的随机数的数量除以线程数(以划分负载),id 为每个用作种子的线程保存一个唯一的 id。我需要创建结构,以便可以将多个值传递给线程调用的辅助函数。

知道为什么线程越多运行速度越慢吗?

最佳答案

在有多个 CPU 可用的环境中,多线程程序可能会表现出更高的性能。然而,当缺少可用的 CPU 资源时,每个线程将不得不等待 CPU 时间的调度。 “上下文切换”是指一个线程从 CPU 中切换出来,而另一个线程切换到 CPU 中。“上下文切换”不是一项微不足道的任务。

因此,线程越多,等待 CPU 资源的线程就越多,内核花费在上下文切换(而不是实际工作)上的时间就越多。

关于c - 操作系统 : Multiple Threads Slowing Down Program (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com