当前位置:首页 > 天道酬勤 > 正文内容

cpu多线程有什么用(多核和多线程哪个好)

张世龙2021年12月20日 07:40天道酬勤670

有阿里面问题。 是这样描述的。 有一个大的整数List,需要求出该List的所有整数之和,编写可以利用多核CPU的代码,计算结果。

这个问题考察的知识点很简单。 切断这个大的List,用多线程分别求解,在所有子线程返回结果时合并,得到最终结果。

直接查看代码:

# #包含iostream

# #包括向量机

# #包含规则

# #包含编号

# #包括克隆

# #包括标志

# #包含矩阵

第二类计时器

私有:

STD : chrono :3360 time _ points TD : chrono 33603360 steady _时钟开始,结束;

STD : chrono :3360 durationfloatduration;

公共:

Timer () )

{

STD=STD :3360 chrono :3360 high _ resolution _ clock 33603360 now (;

}

~Timer () )

{

end=STD :3360 chrono : high _ resolution _ clock 3360: now (;

持续时间=结束-开始;

floats=duration.count(*1000.0f;

STD :计数计时手机' s ' ms ' STD :3360最终版;

}

(;

staticstd : vectorunsignedintv (1E4,0 );

void创建号(

{

for (无符号整数=0; i v.size (; I ) {2}

=;

}

}

静态长期和=0;

unsigned int step=1e3;

std:mutex mtx;

voidsubsum (索引) )。

{

长时间累积=STD :3360累积(v.begin )索引* *步骤,v.begin ) )索引1 )步骤,0 );

mtx.lock (;

求和=缇;

MTX .解锁(;

}

int主() )

{

创建编号(;

时间多媒体成本;

STD : cout '多媒体测试: ' STD :终端;

英特尔thread num=10;

for (英制=0; I thread号; I ) {2}

STD :3360线程tmp (子和,I );

Join (;

}

STD :计数'和='和STD 33603360终端;

multiThread_cost.~Timer (;

sum=0;

timer单读取成本;

STD :单触发测试: ' STD :结束;

sum=STD :3360累积(v.begin ),v .结束),0 );

STD :计数'和='和STD 33603360终端;

singleThread_cost.~Timer (;

std:cin.get (;

}在上述代码中,对于10000个整数的总和,在主线程中创建10个子线程,每个子线程计算1000个总和,然后将10个子线程的结果相加。

多线程、单线程合计时间消耗量的比较

从程序的执行结果来看,为什么多线程比单线程的时间开销多呢? 主要原因是整数的大小不够大,整数的总开销与线程对象的创建和锁定开销相比太小,后者在整个时间消耗中占主要部分。

让我们看看下面的代码。

# #包含iostream

# #包括向量机

# #包含规则

# #包含编号

# #包括克隆

# #包括标志

# #包含矩阵

第二类计时器

私有:

STD : chrono :3360 time _ points TD : chrono 33603360 steady _时钟开始,结束;

STD : chrono :3360 durationfloatduration;

公共:

Timer () )

{

STD=STD :3360 chrono :3360 high _ resolution _ clock 33603360 now (;

}

~Timer () )

{

end=STD :3360 chrono : high _ resolution _ clock 3360: now (;

持续时间=结束-开始;

floats=duration.count(*1000.0f;

STD :计数计时手机' s ' ms ' STD :3360最终版;

}

(;

语音任务() )

{

}

voidsubsum (索引) )。

{

for (无符号长整型I=0; i 1e7; I ) {2}

do任务(;

}

}

int主() )

{

时间多媒体成本;

STD : cout '多媒体测试: ' STD :终端;

英特尔thread num=10;

for (英制=0; I thread号; I ) {2}

STD :3360线程tmp (子和,I );

Join (;

}

multiThread_cost.~Timer (;

timer单读取成本;

STD :单触发测试: ' STD :结束;

for (无符号长整型I=0; IE8; I ) {2}

do任务(;

}

singleThread_cost.~Timer (;

std:cin.get (;

(} )。

单线程和多线程任务消耗时间的比较

从以上结果可以看出,多线程的时间开销比单线程少。 这里的任务被空函数DoTask代替,任务规模较大(1亿次),因此呈现出多线程的优点。

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/25485.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。