多线程不能增加任务的并行性
#include<stdio.h>
#include<time.h>
#include<pthread.h>
void func1();
void func2();
void func3();
int main(void)
{
pthread_t thread1,thread2;
time_t t1,t2;
time(&t1);
func1();
time(&t2);
printf("func1 costs %d seconds\n",(int)(t2 - t1));
time(&t1);
func2();
func3();
time(&t2);
printf("func2&func3 cost %d seconds\n",(int)(t2 - t1));
pthread_create(&thread1,NULL,(void *)(*func1),NULL);
pthread_create(&thread2,NULL,(void *)(*func2),NULL);
time(&t1);
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
time(&t2);
printf("2 threads cost %d seconds\n",(int)(t2 - t1));
return 0;
}
void func1()
{
int i,j,k,l;
for(i = 0;i < 1500;i++)
{
for(j = 0;j < 110;j++)
{
for(k = 0;k < 160;k++)
{
for(l = 0;l < 130;l++)
;
}
}
}
}
void func2()
{
int i,j,k,l;
for(i = 0;i < 750;i++)
{
for(j = 0;j < 110;j++)
{
for(k = 0;k < 160;k++)
{
for(l = 0;l < 130;l++)
;
}
}
}
}
void func3()
{
int i,j,k,l;
for(i = 750;i < 1500;i++)
{
for(j = 0;j < 110;j++)
{
for(k = 0;k < 160;k++)
{
for(l = 0;l < 130;l++)
;
}
}
}
}
有一个大任务,func1,想把这个任务拆成func2和func3两个子任务用两个线程并行,希望缩短计算时间,可测试结果是计算时间并没有缩短,甚至时间还稍微更长些,请问这是为什么,是我多线程用错了吗?我的机器是双核cpu。
[解决办法]
线程建立销毁也需要时间啊
所以不是必须多线程的或者负载本来就不高的不需要使用多线程,用了反而慢
负载至少远远高于线程本身的调用时间才值得去用
[解决办法]