多线程是否真的有必要?

文章讨论了多线程在实际项目中的必要性,通过一个例子展示了优化代码性能的重要性,包括提高Cache命中率和减少分支语句。作者提出,虽然多线程能更好地利用CPU资源,但涉及数据共享时可能并不高效,并提醒面试官和开发者深入理解多线程的复杂性。
摘要由CSDN通过智能技术生成

一点疑问

       相比大家在投简历、面试等等过程中,或多或少会遇到这么一个问题:熟悉掌握多线程开发;谈谈你对多线程的认识。

       其实,我有这么一个疑问,那就是多线程真的有必要么?根据我这两年来的项目经验,也或多或少用了一些多线程的东西,其中有的失败了,有的成功了。但是根据我的所知,有很多程序虽然计算规模很大,实际上却没有使用多线程,但是速度依然很快。有很多程序就算用了多线程,也不见得快了多少。

       那么,多线程真的有必要么?

 

一个例子

       由于我对多线程的了解也是非常浅薄,不敢断言说“必要”或者“不必要”。由于暂定学习多线程定在第三季度或者第四季度,所以仅发表一些个人的观点。

       曾经看过这么一段代码,从中来浅析一下一个程序性能瓶颈是否在于“多线程”。例子如下:

int main(void)
{
   const size_t arraySize = 30000;
   int data[arraySize];
   for (size_t c = 0; c < arraySize; ++c)
    {
       data[c] = std::rand() % 256;
    }
 
   clock_t start = clock();
   long long sum = 0;
 
   for (size_t i = 0; i < 100000; ++i)
    {
       for (size_t c = 0; c < arraySize; ++c)
       {
           if (data[c] >= 128)
           {
                sum += data[c];
           }
       }
    }
 
   double elapsedTime = static_cast<double>(clock() - start) /CLOCKS_PER_SEC;
   std::cout << elapsedTime << std::endl;
   std::cout << "sum = " << sum << std::endl;
 
   return 0;
}

       考虑这个程序,简单说就是从3万个随机数中找到大于等于128的进行累加,这个过程循环10万次,在Visual Studio 2013,Win32平台Release下执行时间为:17s。

那么可以进行优化么?乍看起来,好像无从下手,这么简单的代码还需要进行优化吗?

 

第一种优化

       既然提到了优化,那么必然会有方法了;既然这里提到第一种优化,那么必然会有第二种方法了。

       先上代码,代

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值