take_it_easy_2015 2015-03-13 12:47 采纳率: 100%
浏览 5358
已采纳

多线程真的比单线程执行效率高吗?

对于单核CPU下多线程程序在同一时间点都只能有一个线程运行,对于多核CPU可以实现真正的并发同步运行,这种说法正确吗?
另外在多线程的情况下使用互斥对象来实现线程同步,这样的话多线程程序的运行效率受影响吗?

  • 写回答

5条回答 默认 最新

  • threenewbee 2015-03-14 07:12
    关注

    比如说,你用多线程并行对一个数组进行累加。你用第一个线程处理前50%,另一个线程处理后50%,最后你需要汇总两个线程的结果,因为种种原因,两个线程肯定不会同时结束。
    那么就需要等待全部线程结束,这个等待的过程就等于单线程(先做好的阻塞住等没做好的,同时只有1个在做)
    再比如说,你的程序分为10个线程去计算,和上个例子不同,你不关心先后计算的顺序,但是最后要输出到屏幕上,屏幕只有一个,那么在输出屏幕的时候你必须枷锁,保证只有一个线程能输出,如果有别的线程要输出,就得等待。
    那么输出的过程同样相当于单线程。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 大白菜coder 2015-03-14 01:43
    关注

    单双核的CPU是有影响的,对于多核的处理器只用单线程的话,资源就浪费了,换句话说就是,充分利用CPU的资源,程序固然跑的快,对于单核cpu,多线程的意义在于那些会发生堵塞的任务,线程在堵塞的时候还能去执行任务,这也算是充分利用了CPU了,当然hello world另说。

    评论
  • threenewbee 2015-03-13 14:20
    关注

    单核单CPU,并且CPU不支持SMT/HTT,换言之,只有一个逻辑处理器,那么无法并行。
    即便单处理器,多线程也可能提高效率(吞吐量),因为除了CPU资源,还有外设、IO、网络,使用多线程可以充分利用这些资源,隐藏延迟。
    所谓线程同步,就是线程的阻塞和等待,过度的同步,多线程就相当于回到了单线程。

    评论
  • oyljerry 2015-03-13 15:52
    关注

    多核cpu或者带超线程的CPU都可以同时执行多个线程,这样i 就实现了真正意义上的并行。所以效率高
    但如果现场之间要数据交互,有依赖,有同步那么就会造成线程之间等待,加锁。这样就会降低并效率。

    评论
  • danielinbiti 2015-03-13 14:22
    关注

    1、第一句话一般理论没错,但单核CPU也有超线程技术,超线程技术同一时间点也是可以运行2个线程的。
    2、肯定会影响的。因为多了等待互斥变量释放时间。

    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 求制作一个个人网页,
  • ¥15 寻涂色内存脚本作者有项目有市场有资源.却技术
  • ¥15 蓝桥杯c51单片机问题
  • ¥15 ajax跨域问题请求修改代码
  • ¥15 python matplotlib
  • ¥15 短信测压+语音,有偿,必须用Python
  • ¥20 COCOS2DX的protobuf协议注册函数问题
  • ¥15 (标签-Pytorch|关键词-Stream)
  • ¥15 求深圳2019年开放数据应用创新大赛的营运车辆数据!
  • ¥15 软件UI界面绘制折线图