vc 多线程只用到了3个cpu_java基础篇 - 多线程 - 多线程为什么能够提高程序效率...

大家都知道多线程能够提高程序的运行效率,但是它为什么能够提高程序的运行效率呢?它提高效率的原理在哪里呢?

一、针对多核的CPU

这个不用说,每个CPU运行一个线程,当然能够提高效率,就像多个人干活儿比一个人干活儿效率高一样。

二、针对单核CPU

首先,CPU的运行是分时间片的,即:每个时间片运行一段程序,同时多个线程不断抢占CPU资源,谁抢占到了CPU,谁就运行一段时间。

其次,CPU运行的效率是内存的200多倍;是磁盘IO的2000多万倍,程序在操作内存或者磁盘的时候,CPU会有大量等待时间。

有了以上知识点,那么单线程情况下CPU运行如下:

14b1313b47db467248852e4dc2d6cf48.png

单线程CPU运行情况

线程1运行了2段CPU时间片,然后忙其它事情了,比如操作内存了,此时空闲了一大段时间。忙完其它事情后,继续运行时间片。

那么多线程情况下,CPU运行如下:

3a3189777d1cbdb596188102a22aa659.png

多线程CPU运行情况

线程1运行了2个时间片。

线程1切换到线程2,CPU运行和等待了3个时间片,然后线程2运行了2个CPU时间片。

线程2切换到线程3,CPU运行和等待了3个时间片,然后线程3运行了2个CPU时间片。

线程3再切换到线程1,CPU运行和等待了5个时间片,然后线程1继续运行2个时间片。

综上所述,多线程能够提高程序运行的效率,根本原因是提高了CPU的有效运行时间,让CPU忙起来,做了更多的事情。

那么是不是线程越多,程序效率越高呢?显然不是,因为线程的切换也需消耗CPU的时间。多线程程序运行效率和线程数应该是呈抛物线的关系,如下:

f2b6e0ac181b367dfe12bf909486afbe.png

至于多少个线程运行的效率最高,需要考虑的因素多了,包括硬件(比如CPU、内存、硬盘等的硬件参数)因素和软件因素(比如内存操作频率,磁盘操作频率,网络IO效率)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值