问题描述
- 多线程真的比单线程执行效率高吗?
- 对于单核CPU下多线程程序在同一时间点都只能有一个线程运行,对于多核CPU可以实现真正的并发同步运行,这种说法正确吗?
另外在多线程的情况下使用互斥对象来实现线程同步,这样的话多线程程序的运行效率受影响吗?
解决方案
比如说,你用多线程并行对一个数组进行累加。你用第一个线程处理前50%,另一个线程处理后50%,最后你需要汇总两个线程的结果,因为种种原因,两个线程肯定不会同时结束。
那么就需要等待全部线程结束,这个等待的过程就等于单线程(先做好的阻塞住等没做好的,同时只有1个在做)
再比如说,你的程序分为10个线程去计算,和上个例子不同,你不关心先后计算的顺序,但是最后要输出到屏幕上,屏幕只有一个,那么在输出屏幕的时候你必须枷锁,保证只有一个线程能输出,如果有别的线程要输出,就得等待。
那么输出的过程同样相当于单线程。
解决方案二:
单核单CPU,并且CPU不支持SMT/HTT,换言之,只有一个逻辑处理器,那么无法并行。
即便单处理器,多线程也可能提高效率(吞吐量),因为除了CPU资源,还有外设、IO、网络,使用多线程可以充分利用这些资源,隐藏延迟。
所谓线程同步,就是线程的阻塞和等待,过度的同步,多线程就相当于回到了单线程。
解决方案三:
1、第一句话一般理论没错,但单核CPU也有超线程技术,超线程技术同一时间点也是可以运行2个线程的。
2、肯定会影响的。因为多了等待互斥变量释放时间。
解决方案四:
多核cpu或者带超线程的CPU都可以同时执行多个线程,这样i 就实现了真正意义上的并行。所以效率高
但如果现场之间要数据交互,有依赖,有同步那么就会造成线程之间等待,加锁。这样就会降低并效率。
解决方案五:
单双核的CPU是有影响的,对于多核的处理器只用单线程的话,资源就浪费了,换句话说就是,充分利用CPU的资源,程序固然跑的快,对于单核cpu,多线程的意义在于那些会发生堵塞的任务,线程在堵塞的时候还能去执行任务,这也算是充分利用了CPU了,当然hello world另说。
时间: 2024-11-02 10:22:18